Git: Revertir una fusión

Si fusiona una rama con otra y, por cualquier motivo, decide que desea deshacer la fusión, hay algunas formas de hacerlo con Git. La solución a esto yo...

Si fusiona una rama con otra y, por cualquier motivo, decide que desea deshacer la fusión, hay algunas formas de hacerlo con Git.

La solución a esto es más simple si aún no ha enviado los cambios a un repositorio remoto, y si lo ha hecho, probablemente tendrá que confiar en algo como git revert en lugar de la solución propuesta a continuación. Para este breve artículo, explicaré cómo puede deshacer una combinación de Git que aún no se ha enviado.

El primer paso sería usar reflog para encontrar la confirmación justo antes de la fusión:

1
$ git reflog

Ejecutar esto en su repositorio devolverá una lista de confirmaciones recientes, incluidos sus hashes abreviados, la distancia desde ‘HEAD’ y la descripción. Se verá algo como esto:

1
2
3
4
$ git reflog
8135d07 [correo electrónico protegido]{0}: commit (merge): Merge branch local/bug-34 into local/master
03979c8 [correo electrónico protegido]{1}: commit: Added support for query params
9f7a993 [correo electrónico protegido]{2}: commit (initial): Initial commit

Una vez que encuentre la confirmación a la que desea volver, use el comando reset, similar a lo que hicimos cuando volver a una confirmación anterior, que es esencialmente lo que estamos haciendo aquí:

1
$ git reset --hard <commit-hash>

Entonces, en el ejemplo anterior, es posible que deseemos volver a la confirmación con el mensaje "Agregado soporte para parámetros de consulta", que haríamos así:

1
$ git reset --hard 03979c8

La opción --hard revertirá el código en el árbol, la preparación y las copias de trabajo. Si no desea perder ningún cambio local que haya realizado, --merge o --mixed pueden ser mejores opciones para usted.

Si la confirmación a la que desea volver es solo una detrás de HEAD, entonces puede usar ORIG_HEAD como atajo en el comando reset:

1
$ git reset --hard ORIG_HEAD

Esto será más fácil en algunos casos ya que no tendrás que usar reflog para encontrar el hash de confirmación. ORIG_HEAD es más o menos equivalente a [correo electrónico protegido]{1}, así que solo utilízalo si quieres revertir una sola confirmación.

Nota: Una vez que haya enviado cambios a un repositorio remoto, no se recomienda revertir las confirmaciones de esta manera, ya que estaría borrando el historial. En ese caso, recomendaría usar el comando git revert, que deshará los cambios no deseados como una confirmación separada.

Licensed under CC BY-NC-SA 4.0