Cómo revertir un commit con revert

Cómo revertir cambios de una forma no destructiva por medio del comando revert. Si has hecho un commit que has visto daba problemas, hoy te enseño cómo deshacer sus modificaciones.

Cuando trabajamos en equipo con Git, deshacer cambios puede ser un tema delicado, especialmente si ya hemos compartido nuestro trabajo en un repositorio remoto. Por eso, es fundamental conocer herramientas que nos permitan corregir errores sin afectar la colaboración. Una de las formas más seguras y efectivas para deshacer un commit es usando el comando git revert.

Imaginemos que nuestro diseñador gráfico ha hecho un commit con cambios en la plantilla de nuestra página web, pero el resultado no cumple con nuestras expectativas. Queremos deshacer ese cambio, pero sin causar conflictos con el trabajo que él también está haciendo en el repositorio. Aquí es donde git revert se convierte en nuestro aliado, porque a diferencia de git reset, que puede generar problemas de sincronización cuando otros colaboradores tienen commits diferentes, git revert crea un nuevo commit que invierte los cambios realizados previamente, manteniendo así la integridad del historial.

Para entender cómo funciona, primero podemos revisar qué cambios se hicieron en ese commit con git diff. Por ejemplo, si queremos comparar dos commits específicos, podemos usar:

git diff f5f0388 b4844b

Esto nos mostrará las líneas que se eliminaron y las que se añadieron. En nuestro caso, el diseñador eliminó una tipografía bonita y la sustituyó por otra menos atractiva, además de cambiar el tamaño de la letra. Las líneas eliminadas aparecen en rojo con un signo menos, y las añadidas en verde con un signo más.

El comando git revert hace exactamente lo contrario: vuelve a añadir las líneas que se eliminaron y elimina las que se añadieron, creando un commit que deshace el cambio anterior. Así, si complementamos un commit con su opuesto, el resultado es como si no hubiésemos hecho ningún cambio.

Para referirnos a commits de forma relativa, podemos usar la sintaxis HEAD~n, donde HEAD es el commit actual y n es el número de commits hacia atrás. Por ejemplo, HEAD~1 es el commit anterior a HEAD, y HEAD~2 dos commits atrás. Esto nos facilita trabajar con commits recientes sin tener que copiar sus hashes completos.

Para revertir un commit, simplemente ejecutamos:

git revert b4844b

o si queremos revertir el último commit:

git revert HEAD

Al hacerlo, Git abrirá un editor para que escribamos el mensaje del nuevo commit que deshace el cambio. Una vez guardado, el repositorio vuelve al estado deseado, pero con un historial limpio y sin conflictos para otros colaboradores.

Ahora bien, ¿qué pasa si queremos revertir varios commits? Si hacemos un git revert para cada uno, terminaremos con varios commits nuevos que empiezan con revert, lo que puede saturar el historial. Para evitar esto, podemos usar la opción -n o --no-commit, que aplica los cambios de revert pero no crea el commit automáticamente, dejándonos la posibilidad de agrupar varios reverts en uno solo.

Por ejemplo, para revertir los dos últimos commits en un único commit, haríamos:

git revert -n HEAD
git revert -n HEAD~1
git revert --continue

Con esto, los cambios de ambos commits se revierten y se preparan en el área de staging, y luego con git revert --continue finalizamos el proceso creando un solo commit que deshace ambos cambios.

En definitiva, git revert es una herramienta mucho más segura y cómoda para deshacer cambios en repositorios compartidos, ya que no altera el historial de manera destructiva, sino que añade nuevos commits que corrigen errores anteriores. Esto facilita la colaboración y evita conflictos que pueden surgir con comandos como git reset, especialmente cuando otros desarrolladores ya han sincronizado sus repositorios. Por eso, salvo que sepamos exactamente lo que hacemos y estemos trabajando en un entorno controlado, git revert debería ser nuestra opción preferida para corregir commits.

Lista de reproducción
  1. 1
    ¿Qué es Git?
    4 minutos
  2. 2
    Cómo instalar Git
    9 minutos
  3. 3
    Creando tu primer commit
    9 minutos
  4. 4
    Qué es el staging area
    10 minutos
  5. 5
    Cómo deshacer modificaciones de archivos
    7 minutos
  6. 6
    Cómo deshacer un commit con reset
    7 minutos
  7. 7
    Cómo revertir un commit con revert
    7 minutos
  8. 8
    Introducción a las ramas
    6 minutos
  9. 9
    Cómo crear y modificar ramas
    6 minutos
  10. 10
    Commits bajo el workflow Feature Branch
    6 minutos
  11. 11
    Cómo fusionar ramas con merge
    6 minutos
  12. 12
    Fusiones conflictivas
    9 minutos
  13. 13
    Cómo construir alias
    7 minutos
  14. 14
    Más sobre conflictos
    9 minutos
  15. 15
    Etiquetas
    7 minutos
  16. 16
    Tags anotados
    9 minutos
  17. 17
    git stash: esconder cambios
    6 minutos
  18. 18
    Introducción a remotos
    5 minutos
  19. 19
    Pusheando a un remoto
    6 minutos
  20. 20
    Clonando y haciendo pull
    6 minutos
  21. 21
    Fetch y pull rebases
    8 minutos
  22. 22
    Rebase
    7 minutos
  23. 23
    Rebase interactivo
    6 minutos
  24. 24
    Master, main y otros nombres de rama
    9 minutos
  25. 25
    git switch
    9 minutos
  26. 26
    git-restore
    10 minutos
  27. 27
    git-grep
    11 minutos
  28. 28
    Gitignore
    11 minutos
  29. 29
    El flag --patch
    9 minutos
  30. 30
    git-apply y parches en bruto (advanced)
    9 minutos
  31. 31
    Merge octopus (advanced)
    9 minutos
  32. 32
    Conventional commits
    12 minutos
  33. 33
    Merge and squash (GitLab / GitHub...)
    6 minutos
  34. 34
    git merge --squash
    7 minutos
  35. 35
    git-bisect
    8 minutos
  36. 36
    git-blame
    6 minutos
  37. 37
    git-reflog
    10 minutos
  38. 38
    Git para la Bash
    11 minutos
  39. 39
    Submódulos (parte 1)
    7 minutos
  40. 40
    Submódulos (parte 2)
    10 minutos
  41. 41
    Otros clientes Git (último episodio)
    9 minutos