¿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 errorcf56789 HEAD@{1}: commit: Solucionado error de this undefined<— ESTE es el que queremosde90123 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 mediantegit 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
- 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.
- 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.
- 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,--softes 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.