3.2 ¡Oops! Deshaciendo errores comunes

Cómo deshacer cambios y corregir commits recientes

Como programadores fallamos constantemente. Modificamos el archivo equivocado, añadimos un archivo de configuración secreto o rompemos la aplicación. La promesa principal de Git es que, si lo haces bien, casi nada es destructivo y todo tiene solución.

Retirando archivos del área de preparación

Imagina que modificaste tres archivos y ejecutaste rápidamente git add .. Instantes después te das cuenta de que incluiste un archivo enorme que no debería subirse.

Para sacarlo del Staging Area sin perder el texto que has escrito en él, utilizamos:

git restore --staged archivo_equivocado.txt

Tus modificaciones siguen intactas en tu disco duro (en el Working Directory), pero el archivo ha sido retirado de la caja del próximo commit.

El botón del pánico: tirando todo a la basura

¿Qué ocurre si has estado intentando programar una solución durante horas, el código está roto, tu lógica no tiene sentido y simplemente deseas regresar el archivo a como estaba antes de que empezaras a tocarlo hoy?

git restore mi_archivo.js
Precaución máxima: ¡Ten cuidado con git restore sin banderas! Al ejecutarlo, sobrescribes tu archivo local perdiendo todas tus ediciones que no habías guardado. Es una de las raras formas de perder trabajo para siempre en Git.

Esquema del comando git restore

Viajando más atrás: Los niveles de Git Reset

Diagrama de niveles de git reset
Niveles de git reset y su impacto en el historial y archivos.

A veces el error no está en los archivos actuales, sino en commits enteros que ya hiciste y quieres anular. El comando avanzado para retroceder la línea de tiempo es git reset. Existen tres niveles de fuerza (peligrosidad) que debes conocer:

  1. git reset --soft: Retrocede el historial, pero deja todos los archivos modificados de esos commits ya empacados en tu Staging Area, listos para que los agrupes y hagas un nuevo commit corregido.
  2. git reset --mixed (por defecto): Retrocede el historial y deja los archivos modificados en tu Working Directory. Tendrás que volver a hacer git add.
  3. git reset --hard: ⚠️ Peligro extremo. Retrocede el historial y destruye por completo los archivos modificados, dejándolos idénticos al pasado. Lo que sea que hubieras programado se borra de tu disco duro.

Arreglando la etiqueta de la caja (Amend)

Si simplemente escribiste mal el mensaje del último commit y aún no lo has subido a internet, existe un comando elegante y seguro para reemplazarlo:

git commit --amend -m "fix: mensaje escrito correctamente"

Puntos clave

  • git restore --staged retira archivos de la preparación sin destruirlos.
  • Usar git restore (sin staged) destruirá permanentemente tus modificaciones locales no guardadas.
  • Conoce las diferencias críticas entre los niveles de git reset, y trata el modo --hard con absoluto respeto.
Inicia sesión e inscríbete para guardar tu progreso.