En la mayoría de los casos, sí.
Dependiendo del estado en que se encontraba su repositorio cuando ejecutó el comando, los efectos git reset --hard
pueden variar desde triviales hasta deshacer, hasta básicamente imposibles.
A continuación, he enumerado una serie de diferentes escenarios posibles y cómo puede recuperarse de ellos.
¡Todos mis cambios fueron confirmados, pero ahora los compromisos se han ido!
Esta situación generalmente ocurre cuando se ejecuta git reset
con un argumento, como en git reset --hard HEAD~
. ¡No se preocupe, esto es fácil de recuperar!
Si acabas de correr git reset
y no has hecho nada más desde entonces, puedes volver a donde estabas con esta frase:
git reset --hard @{1}
Esto restablece su rama actual en cualquier estado en el que se encontraba antes de la última vez que se modificó (en su caso, la modificación más reciente a la rama sería el restablecimiento completo que está intentando deshacer).
Sin embargo, si ha realizado otras modificaciones en su rama desde el reinicio, el unicelino anterior no funcionará. En su lugar, debe ejecutar para ver una lista de todos los cambios recientes realizados en su rama (incluidos los reinicios). Esa lista se verá más o menos así:git reflog
<branchname>
7c169bd master@{0}: reset: moving to HEAD~
3ae5027 master@{1}: commit: Changed file2
7c169bd master@{2}: commit: Some change
5eb37ca master@{3}: commit (initial): Initial commit
Encuentre la operación en esta lista que desea "deshacer". En el ejemplo anterior, sería la primera línea, la que dice "reset: mover a HEAD ~". Luego copie la representación del commit antes (abajo) de esa operación. En nuestro caso, sería master@{1}
(o 3ae5027
ambos representan la misma confirmación) y se ejecutará git reset --hard <commit>
para restablecer su rama actual a esa confirmación.
Organicé mis cambios con git add
, pero nunca me comprometí. ¡Ahora mis cambios se han ido!
Esto es un poco más difícil de recuperar. Git hace tener copias de los archivos que ha añadido, pero dado que estos ejemplares no estaban atados a ninguna confirmación en concreto no se puede restaurar los cambios que todos a la vez. En su lugar, debe ubicar los archivos individuales en la base de datos de git y restaurarlos manualmente. Puedes hacer esto usando git fsck
.
Para obtener detalles sobre esto, consulte Deshacer git reset: duro con archivos no confirmados en el área de preparación .
Tuve cambios en los archivos de mi directorio de trabajo con los que nunca me preparé git add
y nunca los comprometí. ¡Ahora mis cambios se han ido!
UH oh. Odio decirte esto, pero probablemente no tengas suerte. git no almacena cambios que no agrega o confirma, y de acuerdo con la documentación paragit reset
:
--difícil
Restablece el índice y el árbol de trabajo. Cualquier cambio en los archivos rastreados en el árbol de trabajo desde entonces <commit>
se descarta.
Es posible que pueda recuperar sus cambios con algún tipo de utilidad de recuperación de disco o con un servicio profesional de recuperación de datos, pero en este punto eso probablemente sea más problema de lo que vale.