Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Cómo deshacer (undo) cambios en Git

10 septiembre, 2019

Errar es de humanos, y nada nos hace más humanos que estar a las 2 de la mañana programando y equivocarnos en algún commit en git que no queríamos hacer o que simplemente nos faltó algo.

Pero gracias a la flexibilidad que tiene git y a que está pensado por programadores es muy fácil deshacer un commit.

Tenemos 3 escenarios vamos viendo uno a uno:

Para estos ejemplos vamos a suponer que tenemos tres commit A-B-C siendo C el último commit.

1. Queremos deshacer el último commit para modificar algo o agregar alguna línea que nos faltó, el equivalente al Ctrl+Z (o Cmd+Z) de git. Para esto simplemente ejecutamos el siguiente comando:

git reset --soft HEAD^1

En el caso que utilices MS Windows tienes que ejecutar git reset –soft HEAD~1 (nota el cambio de ^ por ~)

Después de ejecutar este comando quedaría A-B y los archivos con los cambios.

Con esto eliminamos el commit pero permanecen los cambios que habías realizado, luego de que termines de editar lo que te había faltado vuelves a hacer el commit como siempre lo haces. Algo como:

git add .
git commit -m "Mensaje explicativo del commit"

2. En el último commit que hiciste no merece existir más y quieres eliminarlo de la faz de la tierra y que nadie se entere de lo que hiciste jamás, no quieres guardar ningún cambio de este último commit. Entonces para esto ejecutas:

git log
git reset --hard HEAD^1

En el caso que utilices MS Windows tienes que ejecutar git reset –hard HEAD~1 (nota el cambio de ^ por ~)

En este caso quedaría A-B y C ni los últimos cambios existen.

Con esto se eliminará el último commit por completo y es como si nunca hubiera existido, por qué el git log? es una medida de seguridad si por casualidad te arrepientes de haberlo eliminado porque justo en ese último commit estaba la línea que hacía que todo funcionara puedes recuperarlo ejecutando:

git checkout -b nombre_nueva_rama sha_del_commit_que_destruiste

El sha_del_commit_que_destruiste es el número que aparece al lado de la palabra commit cuando ejecutas git log por ejemplo commit 345f7115ce3e1e611f41cd7492ed0e69945e858d. Estamos creando una nueva rama después que termines de hacer los cambios puedes hacer un merge con la ramas que estás trabajando.

3. Ya el commit está en el repositorio público, para esto la mejor práctica no es eliminar el commit sino crear un nuevo commit revirtiendo los cambios del último. Ejecutamos:

git revert HEAD

Ahora los cambios ya han sido deshechos y están listo para que hagas commit:

git commit -m "Revirtiendo últimos cambios"
git push

Eso es todo realmente muy fácil de corregir esos errores que nos pasan a todos, si tienen alguna pregunta, duda o recomendación por favor déjenla en los comentarios.