Cómo deshacer el último commit en Git

Cuatro casos, cuatro comandos. Busca tu situación y copia el comando que aparece debajo. Regla número cero: ¿ya hiciste push? Usa revert. En los demás casos damos por hecho que el commit sigue en local.

🎙️ Publicado y grabado:

🎧 Escuchar esta guía

«Quiero deshacer el commit, pero CONSERVAR los cambios» (lo más habitual)

git reset --soft HEAD~1
# el commit desaparece y todos los cambios vuelven al staging,
# listos para otro commit. no se pierde nada: es la opción segura.

«Quiero deshacer el commit Y borrar los cambios»

git reset --hard HEAD~1
# ⚠ desaparecen el commit Y tus cambios. asegúrate de querer hacerlo.
# (¿borraste lo que no era? mira reflog al final: se puede recuperar)

«El commit está bien, pero el MENSAJE no»

git commit --amend -m "the message I meant to write"

# ¿olvidaste incluir un archivo? añádelo y enmienda sin editar:
git add forgotten.py
git commit --amend --no-edit

«Ya hice PUSH»: la forma segura de deshacerlo en público

git revert HEAD
# crea un commit NUEVO que anula el anterior.
# el historial avanza y no fastidia al equipo. haz push.

git revert abc1234        # lo mismo para cualquier commit anterior, usando su hash
¿Por qué no usar reset con un commit publicado?
reset reescribe el historial. Si alguien ya descargó el historial anterior, tu force-push deja su trabajo huérfano y el commit puede volver la próxima vez que alguien haga push. De paso, te ganas una conversación bastante incómoda en la reunión diaria. revert deshace el contenido sin tocar el historial. En ramas compartidas, usa revert. Siempre.

«Quiero deshacer los últimos N commits»

git reset --soft HEAD~3    # los últimos 3 commits vuelven juntos al staging
# ahora puedes confirmarlos como un único commit limpio: squash casero

«He usado reset --hard y necesito RECUPERARLO»

git reflog
# muestra cada posición por la que pasó HEAD, incluidos commits "borrados":
#   a1b2c3d HEAD@{0}: reset: moving to HEAD~1
#   f4e5d6c HEAD@{1}: commit: the one you want back  ←

git reset --hard HEAD@{1}  # volver al punto anterior al desastre
# git conserva los commits huérfanos unos 30 días. el pánico es opcional.
Chuleta rápida
conservar cambios → reset --soft HEAD~1  ·  descartarlos → reset --hard HEAD~1  ·  corregir el mensaje → --amend  ·  ya publicado → revert HEAD  ·  recuperar un desastre → reflog
📚 Esta página forma parte de nuestra serie sobre Git. El modelo mental completo —los tres árboles y las ramas como post-its—, con audio: Git en 10 minutos →