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
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.
Viajando más atrás: Los niveles de Git Reset
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:
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.git reset --mixed(por defecto): Retrocede el historial y deja los archivos modificados en tu Working Directory. Tendrás que volver a hacergit add.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 --stagedretira 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--hardcon absoluto respeto.