Deshacer reinicio de Git con la marca --Hard

Ashok Chapagai 11 diciembre 2023
  1. Hubo cambios comprometidos, ahora desaparecidos debido a git reset --hard
  2. Los cambios se organizaron pero no se confirmaron
  3. Los cambios no se comprometieron ni organizaron
Deshacer reinicio de Git con la marca --Hard

A veces, es posible que desee restablecer los cambios hasta un commit en particular. Suponga que opta por la forma git reset --hard <commit id> para restablecer los cambios, pero olvidó que el indicador --hard descarta los cambios no confirmados en el sistema local y luego se da cuenta del error. En ese caso, existen diferentes escenarios desde donde puede recuperar los cambios.

En este artículo, encontrará formas de deshacer los cambios según los diferentes escenarios.

Hubo cambios comprometidos, ahora desaparecidos debido a git reset --hard

Esta situación es una de las más comunes y la más fácil de recuperar cambios. Si ejecuta git reset --hard y ha realizado modificaciones en el repositorio, ejecute git reflog <branchname para enumerar todos los cambios realizados en esa rama, incluidos los reinicios. La salida puede ser algo como esto,

116daf4 dev@{0}: reset: moving to HEAD~
adf3a51 dev@{1}: commit: changed authentication method
4f7fa8c dev@{2}: commit: updated readme
5eb37ca dev@{3}: commit (initial): Initial Commit

Ahora, podemos ver que el primer registro muestra que habíamos restablecido la rama dev. Ahora, para recuperar los cambios del commit dev@{1} o adf3a51, puede ejecutar el comando,

git reset --hard adf3a51

Deshará los cambios hasta ese compromiso.

Los cambios se organizaron pero no se confirmaron

Recuperar los cambios preparados pero no comprometidos es un poco más difícil que el método anterior, pero aún es factible. En primer lugar, puede usar el comando git fsck --lost-found para enumerar todos los hashes de commit que estaban colgando antes de usar el comando git reset --hard. Puede usar git show <commit_hash> para ver qué contiene el hash de commit. Ahora que tiene el hash de commit pendiente que deseaba restablecer, use el comando git reset --hard <commit_hash nuevamente con el hash de commit recuperado para llegar al commit deseada.

Los cambios no se comprometieron ni organizaron

Si todavía está leyendo y se topa con este método, es posible que no haya una forma de deshacer el comando git reset --hard ya que git no almacena los cambios que no agrega o confirma. Si consulta la documentación de git reset y la sección --hard, dice, restablece el índice y el árbol de trabajo. Todos los cambios en los archivos rastreados en el árbol de trabajo desde se descartan.

Dado que no parece posible recuperar los datos de ese estado sin mucha molestia, será más inteligente dejar que esa situación no surja y conocer el comando que estaba a punto de usar y sus banderas también.

Ashok Chapagai avatar Ashok Chapagai avatar

Ashok is an avid learner and senior software engineer with a keen interest in cyber security. He loves articulating his experience with words to wider audience.

LinkedIn GitHub

Artículo relacionado - Git Reset