A veces metemos la pata hasta el fondo en el último commit y no basta con un simple revert. Queremos borrarlo de la faz de la tierra (local y remotamente) como si nunca hubiera existido.
Peligro: Destructivo
Este método elimina cambios. Si trabajas en un equipo, asegúrate de que nadie haya bajado tus cambios antes de hacer esto o tendrás problemas.
1. Corregir mensaje o archivo olvidado (Opción Rápida)
Si solo te equivocaste en el mensaje o olvidaste añadir un archivo, no hace falta resetear. Añade los cambios y “enmienda” el commit. Esto reemplaza el último commit por uno nuevo corrigendo el error.
git add .
git commit --amendgit add .
git commit --amendAl ejecutar esto, se abrirá tu editor de texto predeterminado (Vim, Nano, VS Code…) con el mensaje del commit anterior.
- Modifica el mensaje si quieres.
- Guarda y cierra el archivo (en Vim:
:wq). - Git detectará que has terminado y creará el nuevo commit reemplazando el viejo.
2. Retroceder sin perder nada (Local)
Usamos reset --soft para deshacer el commit pero mantener tus cambios preparados (staged). Así puedes corregir lo que estaba mal, añadir lo que faltaba y volver a commitear.
git reset --soft HEAD~1git reset --soft HEAD~13. Machacar la historia (Remoto)
Ahora tu repo local está “en el pasado” pero GitHub sigue “en el futuro”. Si intentas hacer un push normal, git te rechazará. Necesitas forzar la escritura para que el remoto acepte tu versión antigua como la “verdad absoluta”.
git push origin +maingit push origin +mainNota: El símbolo
+antes del nombre de la rama (+main) es una sintaxis corta para--force. Hace lo mismo pero te hace sentir más hacker.
Alternativa Peligrosa: Hard Reset (La opción Nuclear)
Si git reset --soft es como deshacer escritura, git reset --hard es como quemar el papel y empezar nuevo. Es la opción nuclear para cuando no quieres recuperar nada de lo que hiciste en el último commit.
Peligro Extremo
Este comando elimina permanentemente todos los cambios en tus archivos que no hayas commiteado. No hay vuelta atrás (fácil). Úsalo solo si estás 100% seguro de que tu trabajo reciente es basura.
1. Borrar rastro (Local)
Esto mueve el puntero hacia atrás y sincroniza tu directorio de trabajo con ese estado antiguo.
git reset --hard HEAD~1git reset --hard HEAD~12. Forzar la historia (Remoto)
Igual que con el soft reset, el remoto rechazará esto porque has reescrito el pasado.
git push origin +maingit push origin +main