Deshacer reinicio de Git con la marca --Hard
-
Hubo cambios comprometidos, ahora desaparecidos debido a
git reset --hard
- Los cambios se organizaron pero no se confirmaron
- Los cambios no se comprometieron ni organizaron
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
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.
Artículo relacionado - Git Reset
- Diferencia entre Git RM --Cached y Git Reset File
- Diferencia entre los comandos Git Reset, Revert y Checkout
- Haga que la rama de desarrollo sea idéntica a la rama principal
- Revertir una combinación de Git con conflictos
- Varios métodos utilizados para eliminar los cambios locales de Git
- Deshacer cambios en Git