gui - Recuperar de git reset-duro?
git repository (18)
¿Hay alguna forma de recuperar los cambios no confirmados en el directorio de trabajo desde un git reset --hard HEAD
?
Acabo de hacer git reset --hard
y perdí todos mis cambios no confirmados. Afortunadamente, uso un editor (IntelliJ) y pude recuperar los cambios de la historia local. Eclipse debería permitirte hacer lo mismo.
Accidentalmente ejecuté git reset --hard
en mi repo hoy, aunque también tuve cambios no confirmados. Para recuperarlo, ejecuté git fsck --lost-found
, que escribió todos los blobs no referenciados en <path to repo>/.git/lost-found/
. Dado que los archivos no estaban comprometidos, los encontré en el other
directorio dentro de <path to repo>/.git/lost-found/
. Desde allí, puedo ver los archivos no comprometidos, copiar los blobs y cambiarles el nombre.
Nota: Esto solo funciona si agregó los archivos que desea guardar en el índice (usando git add .
). Si los archivos no estaban en el índice, se pierden.
Cuando hacemos git reset - hard y todos los cambios locales no confirmados se eliminan. Para recuperar los cambios, haga clic en IDE en el archivo, compare el archivo con el historial local, que incluirá los cambios según la fecha y podemos recuperar los datos. ¡Tu día está salvo!
Descubrí la manera difícil en que cualquier archivo no confirmado antes de un git reset --hard <commit>
se elimina del historial de git. Sin embargo, tuve la suerte de haber mantenido abierta la sesión de mi editor de código durante todo el tiempo que estuve retirando mi cabello, descubrí que un simple control + z
en cada uno de los archivos afectados devolvió el estado del archivo a la versión Antes de que Git lo hiciera tan amablemente, restablecí todo lo que no le pedí específicamente. Hooray!!
Esto es lo que normalmente hago si pierdo algunos cambios.
git reflog
git checkout <commit id> // now you are in where you want but you cannot push from detached branch to master
manually copy and paste changes from detached branch to master or working branch
git reset --hard HEAD // if needed
git add ... > git commit ... > git push ...
para mover el puntero a sus confirmaciones anteriores pero manteniendo los cambios realizados hasta el momento en su última comprobación de confirmación git reset --soft dadada
La información se pierde.
Como no lo confirmaste, tu .git nunca almacenó esta información. Así que, básicamente, git
no puede recuperarlo por ti.
Pero, si acaba de hacer git diff
, hay una manera de recuperar utilizando la salida del terminal con los siguientes 3 pasos simples.
- desplácese por su terminal y busque la o / p de
git diff
. Guarde el o / p en un archivo llamado diff.patch - Busque y reemplace los 7 espacios y los 8 espacios con el carácter de tabulación (/ t) y guarde los cambios.
- Entra en tu repositorio git. Aplicar el diff.patch (
patch -p1 < diff.patch
)
Estás salvado! :)
Nota: Mientras copia los datos de la terminal a un archivo, tenga cuidado y vea claramente que los datos son de salida continua y no contenían datos redundantes (debido a que se presionaron las flechas hacia arriba y hacia abajo). De lo contrario podrías estropearlo.
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 traté de borrarlo.
Corrí git reset --hard origin/master
: P
Luego todos mis archivos locales fueron eliminados porque el repositorio estaba vacío. Pensé que todo se había ido.
Esto me salvó la vida:
git reflog show
git reset HEAD@{1}
git push
Espero que salve otra vida.
No se pueden recuperar los cambios no comprometidos en general.
Los cambios previamente organizados ( git add
) deben ser recuperables de los objetos de índice, por lo que si lo hizo, use git fsck --lost-found
para ubicar los objetos relacionados con él.
Si no, la respuesta aquí sería: mira tu copia de seguridad. Quizás su editor / IDE almacene copias temporales bajo / tmp o C: / TEMP y cosas por el estilo. [1]
git reset HEAD@{1}
Esto restaurará a la cabeza anterior.
[1] vim, por ejemplo, almacena opcionalmente deshacer persistente, eclipse IDE almacena el historial local ; tales características podrían ahorrar su a **
Por definición, git reset --hard
desechará los cambios no confirmados sin que Git pueda recuperarlos (su sistema de respaldo puede ayudar, pero no Git).
En realidad, hay muy pocos casos en los que git reset --hard
es una buena idea. En la mayoría de los casos, hay un comando más seguro para hacer lo mismo:
Si quieres deshacerte de tus cambios no comprometidos, usa
git stash
. Mantendrá una copia de seguridad de estos cambios, que caducará después de algún tiempo si ejecutagit gc
. Si está 99.9% seguro de que nunca volverá a necesitar estos cambios, entoncesgit stash
sigue siendo su amigo para el caso de 0.1%. Si está 100% seguro, entoncesgit stash
sigue siendo su amigo porque estos 100% tienen un error de medición ;-).Si desea mover su
HEAD
y la punta de la rama actual en el historial,git reset --keep
es su amigo. Hará lo mismo quegit reset --hard
, pero no descartará los cambios locales.Si quieres hacer ambas cosas, entonces
git stash && git reset --keep
es tu amigo.
Enseñe a sus dedos a no usar git reset --hard
, pagará un día.
Puede recuperar un compromiso después de hacer un reset --hard HEAD
.
Utilice " git reflog
" para verificar el historial de la HEAD
en la rama.
Verás tu commit y su id aquí.
Hacer un
git reset {commit Id of the commit you want to bring back}
Respuesta de referencia de este SO,
Después de ejecutar git reflog show, diga que quiere ir a cometer 9300f9d
después de ejecutar git reset 9300f9d
puede hacer el estado de git, y entonces es posible que deba revisar su (s) archivo (s) para restaurar sus cambios
git checkout - filepath / nombre
Respuestas correctas. OK, ahora me gusta git. :-) Aquí hay una receta más sencilla.
git log HEAD@{2}
git reset --hard HEAD@{2}
Donde "2" es el número de vuelta a donde confirmó sus cambios. En mi caso, interrumpido por un colega y un jefe para ayudar a depurar algún problema de compilación; así, hizo un reinicio --duro dos veces; así, HEAD y HEAD @ {1} se sobrescribieron. Menos mal, habríamos perdido nuestro trabajo duro.
Si está desarrollando en Netbeans, mire entre las pestañas de archivos y el área de edición de archivos. Hay una "Fuente" y "Historia". En "Historial" verá los cambios realizados con el control de versiones (git / other), pero también los cambios realizados localmente. En este caso, los cambios locales podrían salvarlo.
Si estás tratando de usar el siguiente código:
git reflog show
# head to recover to
git reset HEAD@{1}
Y por alguna razón están consiguiendo:
error: interruptor desconocido `e ''
a continuación, intente envolver HEAD@{1}
entre comillas
git reset ''HEAD@{1}''
Si usas algo como IntelliJ:
En el menú contextual, elija Historial local y haga clic en Mostrar historial en el submenú:
La vista de historial local de un proyecto o carpeta le muestra todo lo que ha hecho durante los últimos días. En la columna Acción de la parte inferior del cuadro de diálogo, seleccione la acción que desea deshacer. [...] Al hacerlo, la parte superior del cuadro de diálogo muestra la vista de árbol de los archivos modificados. Si desea restaurar solo el archivo eliminado, independientemente de los otros cambios que se hayan realizado desde entonces, puede seleccionar el archivo Lost.txt en la vista de árbol y hacer clic en el botón Revertir.
http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/
¡Esto acaba de sacar mi trasero del fuego!
Si, por suerte, ha abierto los mismos archivos en otro editor (p. Ej., Sublime Text), intente con ctrl-z en esos. Simplemente me salvó ..
responde de esto SO
$ git reflog show
93567ad HEAD@{0}: reset: moving to HEAD@{6}
203e84e HEAD@{1}: reset: moving to HEAD@{1}
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug
# said the commit to be recovered back is on 9300f9d (with commit message fix-bug)
$ git reset HEAD@{7}
¡Has recuperado tu día! :)
Sí, PUEDES RECUPERARSE de un restablecimiento completo en git.
Utilizar:
git reflog
para obtener el identificador de su compromiso. Luego use:
git reset --hard <commit-retrieved-using-reflog>
Este truco me salvó la vida un par de veces.
Puedes encontrar la documentación de reflog HERE .