2011-01-16 16 views
44

Estoy usando Git y he cambiado el nombre manualmente de un archivo que había agregado al repositorio. Ahora, he agregado el "nuevo" archivo que renombré al repositorio pero Git se queja de que el archivo "viejo" ha sido eliminado. Entonces, ¿cómo puedo hacer que Git se olvide del viejo archivo? Mejor aún, ¿cómo le digo a Git que el "nuevo" archivo es realmente el "nuevo" archivo para que pueda mantener el historial de cambios intactos?Git: archivo renombrado manualmente, Git confundido

+3

'git mv old new' es esencialmente solo' git rm --cached viejo; mv viejo nuevo; git add new', con algunos conocimientos adicionales. Git identifica el cambio de nombre buscando contenido similar, por lo que los detectará si usó 'git mv' o no. Es decir, no hay manera de * decirle * que esos dos archivos correspondan. – Cascabel

+0

Posible duplicado de [¿Cómo hacer que git marque un archivo eliminado y uno nuevo como un movimiento de archivo?] (Http://stackoverflow.com/questions/433111/how-to-make-git-mark-a-deleted-and -a-new-file-as-a-file-move) –

Respuesta

6

En primer lugar, cancelar su protagonizaron añadir el archivo movido manualmente:

$ git reset path/to/newfile 
$ mv path/to/newfile path/to/oldfile 

A continuación, utilizar Git para mover el archivo:

$ git mv path/to/oldfile path/to/newfile 

Por supuesto, si usted ya ha confirmado el movimiento manual, Es posible que desee restablecer a la revisión antes del movimiento en su lugar, y luego simplemente git mv desde allí.

+2

Ese último comando dio un error: fatal: no bajo el control de versión – mmersz

+0

solo tenía que hacer: git agregar oldfile antes del último comando. ¡GRACIAS AMBER! – mmersz

2

Prueba esto:

mv new old 
git rm new 
git mv old new 
+0

Esto no funciona. Git aún no marca el archivo como renombrado. –

39

No hay ningún problema. Simplemente git rm old o incluso git add -A y se dará cuenta de que se trata de un cambio de nombre. Git verá la eliminación más el agregado con el mismo contenido que un cambio de nombre.

No necesita deshacer, dejar de grabar, usar git mv etc. git mv old new es solo una mano breve para mv old new; git rm old; git add new.

+9

Si el archivo anterior ya no está, tienes que usar 'git rm --cached old', ya que no hay ningún archivo en el árbol de trabajo para eliminar. – Cascabel

+1

¿Qué sucede si mueves el archivo y cambias unas pocas líneas, y luego 'git add -A'? ¿Git es lo suficientemente inteligente como para saber que un archivo _similar_ es el mismo que el anterior? – Phil

+2

@Phil Sí. Intentalo. –

0

Si se produce este error, probablemente signifique que el archivo que está tratando de mover no ha sido rastreado originalmente por git o el directorio al que intenta mover el archivo no es un directorio git tracked.