¿Cómo recuperar código después de un git reset —hard?

Para recuperar código después de un git reset --hard, debes usar el comando git reflog. Este comando muestra un historial de todos los movimientos del HEAD, incluyendo aquellos que ya no aparecen en el log principal. Identifica el hash del commit previo al desastre y ejecuta git reset --hard <hash> para restaurar tu trabajo.

En Git, casi nada se borra permanentemente de inmediato. Mientras no hayas ejecutado comandos de limpieza profunda (como el recolector de basura), tus archivos siguen en la base de datos de objetos esperando ser rescatados.

Paso a paso: El Jutsu de Resurrección (Reflog)

1. Abre la terminal y visualiza el Reflog

El log estándar (git log) solo muestra los commits de la rama actual. El reflog es el diario secreto de Git.

git reflog

Verás una lista similar a esta:

  • ab12345 HEAD@{0}: reset: moving to HEAD~1 <— Aquí fue el error
  • cf56789 HEAD@{1}: commit: Solucionado error de this undefined <— ESTE es el que queremos
  • de90123 HEAD@{2}: checkout: moving from master to dev

2. Identifica tu salvavidas

Busca la línea anterior al comando reset. En el ejemplo de arriba, el commit que necesitamos es el cf56789.

3. Ejecuta el rescate

Tienes dos opciones dependiendo de lo que quieras lograr:

Opción A: Volver totalmente atrás (Recomendado)

git reset --hard cf56789

Opción B: Crear una nueva rama desde ese punto (Más seguro)

git branch recuperacion cf56789

¿Qué pasa con los archivos que NO estaban en un commit?

Aquí viene la mala noticia: Si los cambios no estaban en el stage o commiteados, git reset --hard los borra del disco. Git solo protege lo que conoce.

  • Si hiciste git add: Es posible recuperarlos mediante git fsck --lost-found, aunque es un proceso mucho más tedioso (archivos sueltos sin nombre original).
  • Si nunca hiciste add ni commit: Esos cambios se han perdido para Git. Tu última esperanza es el historial local de tu IDE (como el “Local History” de VS Code).

Errores Comunes

  1. Entrar en pánico y cerrar la terminal: No pasa nada si la cierras, pero el tiempo corre. Git limpia objetos huérfanos cada cierto tiempo.
  2. Hacer más resets: Si sigues haciendo resets sin saber qué haces, llenarás el reflog de basura y será más difícil encontrar el hash correcto.
  3. No usar el Stash: Para evitar desastres, usa siempre git stash antes de experimentar con resets.

Mejores Prácticas para el Futuro

  • Commits atómicos: Haz commits pequeños y frecuentes. Es más fácil recuperar 10 minutos de trabajo que 4 horas.
  • Usa git reset --soft: Si solo quieres deshacer un commit pero mantener los archivos en tu carpeta, --soft es tu mejor amigo.
  • Configura Alias: Crea un alias para un log más visual que te ayude a entender dónde estás parado antes de resetear.

Si dominas el reflog, pierdes el miedo a experimentar con la terminal. Te invitamos a leer nuestra guía sobre estrategias de ramas con Git Flow o cómo configurar hooks de Git para automatizar tus pruebas.