Revertir cambios de commits antiguos
Vale, ya hemos aprendido a comprobar el historial de nuestro repositorio y a comparar cambios entre commits.
¿Y si encontramos un bug en un commit de hace tiempo? ¿Cómo podemos deshacer los cambios que hizo ese commit?
La forma más sencilla de deshacer cambios es hacer a mano los cambios inversos y crear un commit con ellos. Pero ¿y si los cambios son complejos y no quieres meterte en ese lío?
En Git, puedes revertir los cambios de cualquier commit anterior con el comando seguido del hash del commit cuyos cambios quieres revertir. Ojo: este comando no elimina el commit; crea un commit nuevo con los cambios inversos. Añadir un commit extra puede parecer redundante, pero ayuda a mantener el historial coherente. Al fin y al cabo, ¿qué pasa si luego te das cuenta de que los cambios que revertiste en realidad estaban bien?
Vamos a practicarlo. Primero, metamos un "bug" en nuestro código.
<html>
<head>
<link rel="stylesheet" href="style.css"/>
</head>
<body>
<h1>Hello, World!</h1>
<p>This is a bug!</p>
</body>
</html>Añade la línea <p>This is a bug!</p> a hello.html, prepara los cambios y crea un commit con el mensaje Introduced a bug.
¡Genial! En este punto aún podríamos deshacer los cambios con git commit --amend. Pero ¿y si descubrimos el error demasiado tarde? Vamos a hacer otro commit más o menos correcto y luego veremos cómo revertir los cambios del anterior, el que contenía cambios no deseados.
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css"/>
</head>
<body>
<h1>Hello, World!</h1>
<p>This is a bug!</p>
</body>
</html>Añade la línea <!DOCTYPE html> a hello.html, prepara los cambios y crea un commit con el mensaje Added HTML5 doctype.
Ahora vamos a comprobar el hash del commit que introdujo el bug. Ejecuta git log para encontrarlo.
Ejecuta git log y busca el hash del commit que introdujo el bug.
Consejo: Recuerda que puedes desplazarte por la salida de git log con las teclas de flecha y del teclado. Para salir del modo pager, pulsa q.
Con el hash del commit, ya podemos revertir los cambios hechos por ese commit. Sustituye por el hash real en el siguiente comando:<commit>
git revert <commit>Esto abrirá tu editor de texto predeterminado para pedirte el mensaje del commit. Puedes dejar el mensaje predeterminado, guardar y cerrar el archivo.
Revierte los cambios del commit que introdujo el bug usando git revert.
Genial, los cambios del bug se han revertido. Ahora comprueba la diferencia que produjo el último commit. ¿Recuerdas cómo hacerlo con ? Necesitarás recordar cómo el commit anterior al último.
Comprueba el diff entre los dos últimos commits.
Como ves, estos son los cambios inversos del commit que introdujo el bug. Así puedes revertir los cambios de cualquier commit de tu repositorio.
Ten en cuenta que revertir cambios así no es infalible y puede provocar conflictos si Git no consigue aplicar los cambios inversos. En ese caso, tendrás que resolver los conflictos a mano. Si quieres aprender más sobre cómo resolver conflictos, sigue por aquí hasta después del curso principal.
Haz el curso como estaba pensado: progreso en pequeñas dosis, un orden lineal y sin distracciones, y entradas de Gitopedia que se desbloquean poco a poco. Continúa con Git real en VS Code/Cursor/Antigravity/Windsurf cuando quieras.
pero requiere iniciar sesión