Recuperarse de la pérdida de cambios no confirmados mediante "git reset --hard"
¿Hay alguna forma de recuperar cambios no confirmados en el directorio de trabajo desde un archivo git reset --hard HEAD
?
Para cambios confirmados previamente (respuesta de este SO ):
$ git reflog show
4b6cf8e (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: reset: moving to origin/master
295f07d HEAD@{1}: pull: Merge made by the 'recursive' strategy.
7c49ec7 HEAD@{2}: commit: restore dependencies to the User model
fa57f59 HEAD@{3}: commit: restore dependencies to the Profile model
3431936 HEAD@{4}: commit (amend): restore admin
033f5c0 HEAD@{5}: commit: restore admin
ecd2c1d HEAD@{6}: commit: re-enable settings app
# assuming you want to get back to 7c49ec7 (restore dependencies to the User model)
$ git reset HEAD@{2}
En general, no se pueden recuperar cambios no confirmados.
Los cambios realizados previamente ( git add
) deberían poder recuperarse de los objetos de índice, por lo que, si lo hizo, utilícelo git fsck --lost-found
para localizar los objetos relacionados con ellos. (Esto escribe los objetos en el .git/lost-found/
directorio; desde allí puede usarlos git show <filename>
para ver el contenido de cada archivo).
Si no, la respuesta aquí sería: mira tu copia de seguridad. Quizás su editor/IDE almacene copias temporales en /tmp o C:\TEMP y cosas así.[1]
git reset HEAD@{1}
Esto restaurará al HEAD anterior.
[1] vim , por ejemplo, almacena opcionalmente la deshacer persistente, eclipse IDE almacena el historial local ; Estas características podrían salvarte el culo.
Accidentalmente ejecuté git reset --hard
mi repositorio hoy también mientras tenía cambios no confirmados hoy. Para recuperarlo, ejecuté git fsck --lost-found
, que escribió todos los blobs sin referencia en <path to repo>/.git/lost-found/
. Como los archivos no estaban confirmados, los encontré en el other
directorio dentro del archivo <path to repo>/.git/lost-found/
. Desde allí, puedo ver los archivos no confirmados usando git show <filename>
, copiar los blobs y cambiarles el nombre.
Nota: Esto solo funciona si agregó los archivos que desea guardar al índice (usando git add .
). Si los archivos no estaban en el índice, se pierden.
No hay cambios no confirmados, pero puede recuperar cambios confirmados previamente después de un restablecimiento completo en git.
Usar:
git reflog
para obtener el identificador de su confirmación. Luego usa:
git reset --hard <commit-id-retrieved-using-reflog>
Este truco me salvó la vida un par de veces.
Puedes encontrar la documentación de reflog AQUÍ .
Mientras trabajaba en un proyecto local, quería moverlo a GitHub y luego crear un nuevo repositorio. Mientras intentaba agregar todos estos archivos al nuevo repositorio con .gitignore, accidentalmente agregué un archivo incorrecto y luego intenté borrarlo.
yo corrígit reset --hard origin/master
Luego, todos mis archivos locales se eliminaron porque el repositorio estaba vacío. Pensé que todo se había ido.
Esto funcionó para mí:
git reflog show
git reset HEAD@{1}
git push