Deshacer git mv (renombrar)

139

¿Cuál es la forma correcta de deshacer un cambio de nombre en git, como:

git mv file1 file2
jrdioko
fuente
21
Respuesta descarada:git mv file2 file1
CanSpice
@CanSpice: Esa es la respuesta correcta; nada descarado al respecto.
CB Bailey
1
@Charles: Bueno, entonces, lo he proporcionado como una respuesta adecuada y no descarada. :-)
CanSpice
git mv file2 file1 ¿Esperaba algo más?
Lakshman Prasad

Respuestas:

230

Respuesta no descarada:

git mv file2 file1

Actualiza el índice de las rutas antiguas y nuevas automáticamente.

Consulte la documentación de git mv

CanSpice
fuente
44
supongamos que file1 y file2 están ambos en el directorio actual (.), entonces ¿por qué git checkout .no funciona, incluso con la -fopción?
ryenus
9
Parece raro que las cosas sean tan intuitivas como esto :)
ragerdl
@ryenus Tienes que usar git checkout -- ..
Joseph238
Jajaja Eso es gracioso.
Dmitriy Dokshin
No funcionó para mí dando el error: fatal: source directory is empty,solo git reset --hardfuncionó.
mac13k
43

Si no ha realizado otros cambios (que desea mantener) desde la última confirmación, puede hacer

git reset --hard
Klas Mellbourn
fuente
66
No me gustaría tener el hábito de usar git reset --hard. Simplemente moverlo hacia atrás me parece una opción más segura.
osa
44
Trabajó para mi. Quería deshacer un "git mv" que 1) aún no se había cometido, y 2) no tenía otros cambios
Ed of the Mountain
Si tiene otros cambios que desea conservar, esto los destruirá a todos.
user151841
13
git reset HEAD file2

hizo el truco para mí

zbig
fuente
1
El único problema que tuve con esta respuesta es que dejó copias para el archivo 2 en el disco.
user52472
9

En mi caso, moví una carpeta completa, luego me di cuenta de que no debería haberlo hecho.

Realmente me gustó la respuesta de @Dave Konopka, pero no tuve mucho éxito con ese enfoque (¿tal vez mi versión de GIT (1.8.4)? Mis archivos aún se mostraban como eliminados. Tenía otros cambios en la pila que no quería) perder (desafortunadamente)

Tuve éxito haciendo esto:

git reset moved_folder
git checkout original_folder
zedd45
fuente
8

Depende de lo que quieras lograr. Si desea que aparezca como si el archivo nunca se hubiera movido, puede restablecerlo (o cambiarlo) antes de moverlo. Si no le importa la historia, simplemente muévala hacia atrás.

William Pursell
fuente
44
El primero funciona bien siempre y cuando no haya presionado su compromiso, o alguien no se haya retirado de usted.
CanSpice
7

Si accidentalmente renombró una gran cantidad de archivos y desea volver a donde comenzó, elimine todos los archivos renombrados que aparecen como addsbajo una git statusllamada.

Una vez que elimine todos los archivos modificados, puede ejecutarlos git checkout -- *para recuperar localmente los nombres de los archivos originales.

Dave Konopka
fuente
4
git reset HEAD file2
git checkout -- file1
rm file2

El primer comando desentierra el archivo2 pero deja una copia del mismo. El segundo comando restaura el archivo original y el tercero elimina el nuevo archivo.

Kamaraju Kusumanchi
fuente
1

El truco que utilicé fue hacer un alijo git para deshacer todos mis cambios (que incluye la restauración de los archivos mv'd) y luego eliminar el alijo con git stash drop.

siete continentes
fuente
0

Menos aterrador es ir al nivel superior del repositorio y hacer:

git reset
git checkout.

w0mbat
fuente