git revert
Deshace un commit creando un commit nuevo
El comando 'git revert' deshace un commit anterior añadiendo un commit nuevo que aplica el cambio contrario. El historial no se reescribe — el commit original se queda — así que es la forma segura de deshacer commits ya subidos y compartidos. Puede haber conflicto si commits posteriores tocaron las mismas líneas; resuélvelo y luego git revert --continue.
Sinopsis
git revert [--[no-]edit] [-n] [-m <parent-number>] <commit>...
git revert (--continue | --skip | --abort | --quit)Opciones
Elegir la opción adecuada
revert frente a reset
Dos formas de deshacer commits
| Comando | Historial | ¿Seguro tras el push? |
|---|---|---|
git revert <commit> | Añade un commit que deshace | Sí |
git reset --hard <commit> | Quita commits de la rama | No — necesita un push forzado |
Ejemplos
Deshacer el último commit
git revert HEADCrea un commit que deshace HEAD.
Deshacer un commit anterior
git revert a1b2c3dDeshace ese commit y deja los posteriores.
Deshacer una fusión
git revert -m 1 <merge-commit>Deshace los cambios que trajo una fusión.
Ejemplos de flujos de trabajo
git log --onelineEncontrar el commit
git revert a1b2c3dCrear el commit que lo deshace
git pushCompartirlo — sin forzar
Solución de problemas
error: commit is a merge but no -m option was given
Causa: Una fusión tiene dos padres
Usa git revert -m 1 <commit>
CONFLICTO durante el revert
Causa: Commits posteriores cambiaron las mismas líneas
Arregla los archivos, haz git add y luego git revert --continue (o --abort)
Consejos y trampas
Buenas prácticas
- ✓Usa revert en commits compartidos; reset solo en los locales.
- ✓Explica el porqué en el mensaje del revert.
- ✓Revierte primero el más reciente cuando deshagas varios commits.
Errores comunes
- ✗Usar git reset en commits subidos en vez de git revert, obligando a todos a arreglar su historial.
- ✗Revertir una fusión sin -m.
- ✗Volver a fusionar una rama revertida y no entender por qué no vuelven sus cambios — revierte primero el revert.
Preguntas frecuentes
No. Añade un commit nuevo; el original sigue en el historial.
Sí — vuelve a aplicar el cambio original.
git revert --abort.