Recuperarse de la pérdida de cambios no confirmados mediante "git reset --hard"

Resuelto Jacob Lyles asked hace 13 años • 23 respuestas

¿Hay alguna forma de recuperar cambios no confirmados en el directorio de trabajo desde un archivo git reset --hard HEAD?

Jacob Lyles avatar Apr 26 '11 15:04 Jacob Lyles
Aceptado

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}
ken avatar Jun 16 '2014 02:06 ken

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-foundpara 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.

sehe avatar Apr 26 '2011 08:04 sehe

Accidentalmente ejecuté git reset --hardmi 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 otherdirectorio 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.

Justin avatar Jul 21 '2011 17:07 Justin

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Í .

Gabe avatar Dec 02 '2016 19:12 Gabe

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 
Orcun avatar Nov 06 '2016 16:11 Orcun