Git Hacks: Volver a un commit anterior (Viajes en el tiempo)

domingo, junio 14, 2020
Git Logo

¿Les ha pasado que les piden unos cambios en el proyecto y luego de que los terminamos y hacemos commits de ellos, deciden que no los quieren? Git nos brinda una manera sencilla de volver nuestro branch a un commit anterior, o en otras palabras, volver en el tiempo.



Existen varias maneras que nos permiten lograr volver a un commit anterior, acá les voy a mostrar como hacerlo con el comando git reset.

Es importante no tener ningún cambio en progreso o de otra manera se perderá durante el proceso. Y además que los commits a eliminar no se encuentren compartidos en un repositorio público o de lo contrario pueden generarse conflictos.


Lo primero que debemos hacer es obtener el id (hash) del commit al cual queremos volver y lo podemos hacer de la siguiente forma:

git log --oneline

3ae884e (HEAD -> master) Se le pone corazón al formulario ASAP
1a61b76 Se agregan más opciones al formulario ASAP
0b448af Se agrega formulario ASAP
d4e428e Se agrega formulario de Proveedores
41df9f8 Se agrega formulario de Clientes
1a3a429 Se agrega formulario de Usuarios
2e7e6cd Primer commit

Supongamos en este caso que los cambios que no se quieren son a partir del commit con mensaje Se agrega formulario ASAP, entonces queremos volver al commit d4e428e descrito como Se agrega formulario de Proveedores.

Ejecutaríamos lo siguiente:

git reset --hard d4e428e

Si hacemos nuevamente un:

git log --oneline

d4e428e (HEAD -> master) Se agrega formulario de Proveedores
41df9f8 Se agrega formulario de Clientes
1a3a429 Se agrega formulario de Usuarios
2e7e6cd Primer commit

Podemos ver como ya se han removido todos los commits que seguían a Se agrega formulario de Proveedores. ¡Genial!

Pero como la vida es así de inesperada. Vuelven a decirnos que los cambios si van a requerirse.

¡Nooo! No puede ser... ¿Y ahora? Es el momento de mantener la calma, ya que git nos brinda la posibilidad de volver al futuro.

Lo único que tenemos que hacer es un:

git reflog

d4e428e (HEAD -> master) HEAD@{0}: reset: moving to d4e428e
3ae884e HEAD@{1}: commit: Se le pone corazón al formulario ASAP
1a61b76 HEAD@{2}: commit: Se agregan más opciones al formulario ASAP
0b448af HEAD@{3}: commit: Se agrega formulario ASAP
d4e428e (HEAD -> master) HEAD@{4}: commit: Se agrega formulario de Proveedores
41df9f8 HEAD@{5}: commit: Se agrega formulario de Clientes
1a3a429 HEAD@{6}: commit: Se agrega formulario de Usuarios
2e7e6cd HEAD@{7}: commit (initial): Primer commit

Allí podremos ver el historial completo de cambios de nuestro repositorio local e identificar el hash del commit que tiene el cambio al que queremos ir. En este caso el 3ae884e.

Basta nuevamente con hacer:

git reset --hard 3ae884e

Entonces podemos ver los resultados:

git log --oneline

3ae884e (HEAD -> master) Se le pone corazón al formulario ASAP
1a61b76 Se agregan más opciones al formulario ASAP
0b448af Se agrega formulario ASAP
d4e428e Se agrega formulario de Proveedores
41df9f8 Se agrega formulario de Clientes
1a3a429 Se agrega formulario de Usuarios
2e7e6cd Primer commit

¡Y listo! Ya podemos ver como recuperamos nuestro trabajo.

Gracias Doc. Git, por salvarnos la vida una vez más.


Y ustedes, ¿se han visto alguna vez en esta situación?

También te puede interesar

Cuando navego por los sitios web, mi parte favorita es leer los comentarios. Es por eso que tus comentarios son un complemento valioso para mis entradas. Cualquier duda o aporte no dejes de escribirlo, en breve lo estaré publicando. ¡Gracias!


1 comentarios

Lo más reciente

¡Bendiciones para mi Venezuela!

¡Bendiciones para mi Venezuela!