Deshacer Cambios y Errores
A todos nos pasa: guardamos un cambio que rompía todo, borramos un archivo por accidente o enviamos un commit con un error tipográfico vergonzoso. Git brilla precisamente solucionando estos desastres.
1. Descartar cambios sin guardar (Antes del Add)
Estás escribiendo código, te arrepientes de todo lo que hiciste en la última hora y quieres que el archivo vuelva a estar exactamente igual que en tu último commit oficial.
Para descartar cambios de un archivo específico:
git restore archivo-arruinado.js
Para descartar TODOS los cambios no guardados del proyecto (¡Peligro!):
git restore .
Advertencia: Lo que restaures aquí se pierde para siempre. Git no lo había guardado aún en el historial.
2. Sacar archivos del Staging Area (Después del Add)
Hiciste git add . pero te diste cuenta de que incluiste archivos de contraseñas o archivos temporales que no quieres ensuciar en el próximo commit.
Para sacar un archivo de la zona "verde" de espera (Staging):
git restore --staged archivo-secreto.env
Esto NO borra el contenido de tu archivo. Simplemente lo saca de la lista de cosas "por guardar" y lo devuelve a rojo.
3. Modificar el último Commit (Después del Commit)
Hiciste git commit -m "Agrega login" pero te diste cuenta de que te faltó añadir una imagen, o que el mensaje tenía un error de ortografía.
En lugar de hacer un commit nuevo diciendo "Agrega la foto del login que me olvidé", puedes modificar mágicamente el anterior.
- Añade los archivos que te olvidaste (si los hay):
git add mi-imagen.png - Ejecuta el comando amend (enmendar):
git commit --amend -m "Agrega pantalla de login completada con imagen"
Esto sobrescribe y reemplaza el último commit de tu historial.
Regla de Oro: NUNCA uses
--amenden commits que ya enviaste (pusheaste) a GitHub. Solo enmienda commits que sigan viviendo 100% en tu computadora local.
4. Viajar en el tiempo permanentemente (Reset Fuerte)
Hiciste 3 commits que son un desastre total y quieres que tu proyecto retroceda en el tiempo, eliminando esos commits del historial general de la existencia de la humanidad como si nunca hubieran pasado.
# Retroceder tu rama 3 commits atrás y BORRAR ese código
git reset --hard HEAD~3
Peligro:
reset --hardelimina tu trabajo reciente.
5. Revertir de forma educada (Revert)
Si tu proyecto ya está subido a GitHub, compartiéndose con tu equipo, no puedes usar reset --hard. Borrar parte de la historia compartida romperá el proyecto del resto del equipo la próxima vez que hagan pull.
En lugar de borrar el error del historial, creamos un nuevo commit que haga exactamente lo inverso al error (si habías sumado una palabra, el revert la resta).
# Revertir un commit específico usando su ID (la "matrícula" alfanumérica)
git revert 8a4c1b9
Esto dejará constancia en el historial de que metiste la pata, pero también dejará constancia de que lo arreglaste responsablemente deshaciendo los cambios oficiales.