Git: Deshacer un commit
Última actualización
Cómo deshacer un commit depende de cuál sea y de si ya lo has subido. Un commit antiguo enterrado en tu historial —o cualquier cosa ya compartida— pide git revert, que añade un nuevo commit que lo revierte sin reescribir nada. Una serie de commits locales recientes se puede eliminar sin más con git reset. Si solo necesitas deshacer el commit más reciente, la página de deshacer el último commit en Git cubre todas las variantes de ese arreglo rápido.
Prueba estos comandos en el terminal playground: una shell real en tu navegador, sin nada que instalar.
Qué comando usar
| Situation | Command |
|---|---|
| Deshacer un commit antiguo, conservar todo lo posterior | git revert <hash> |
| Deshacer un commit que ya subiste | git revert <hash> |
| Deshacer los últimos 3 commits locales, conservar el trabajo | git reset --soft HEAD~3 |
| Deshacer los últimos 3 commits locales, descartar el trabajo | git reset --hard HEAD~3 |
| Deshacer un rango con nuevos commits inversos | git revert HEAD~3..HEAD |
reset vs revert
| Behavior | git reset | git revert |
|---|---|---|
| Reescribe el historial | Sí | No |
| Seguro en commits subidos | No | Sí |
| Crea un nuevo commit | No | Sí |
| Funciona con commits antiguos en medio del historial | No | Sí |
| Puede descartar cambios | Sí (--hard) | No |
Ejemplo práctico
Deshaz un commit antiguo concreto —incluso uno ya subido— sin tocar los commits que vinieron después.
| Step | Command | Result |
|---|---|---|
| 1 | git log --oneline | Encuentra el hash del commit erróneo (p. ej. a1b2c3d) |
| 2 | git revert a1b2c3d | Un nuevo commit lo revierte; los commits posteriores quedan intactos |
| 3 | git push | Comparte el arreglo: no se reescribió el historial |
Preguntas frecuentes sobre deshacer un commit en Git
¿Cómo deshago un commit antiguo sin perder los commits posteriores?
git revert <hash>. Revert crea un nuevo commit que revierte solo el que indicas: todos los commits posteriores quedan exactamente como estaban. Encuentra primero el hash con git log --oneline. Si el revert entra en conflicto con cambios posteriores, Git se detiene para que resuelvas y ejecutes git revert --continue.¿Cómo deshago varios commits a la vez?
git reset --soft HEAD~3 elimina los tres últimos conservando sus cambios preparados (usa --hard para descartarlos). Para commits ya subidos, revierte el rango en su lugar: git revert --no-commit HEAD~3..HEAD revierte los tres, y un único git commit registra la operación.¿Cómo deshago un commit que ya he subido?
git revert <hash> en lugar de reset. Revert crea un nuevo commit que deshace los cambios del commit objetivo, dejando el historial intacto. Esta es la forma segura de deshacer commits compartidos: reescribir el historial publicado con reset obliga a todos los demás a reconciliar sus copias.