Deshacer Rebase en Git

Azhar Bashir Khan 6 febrero 2022
Deshacer Rebase en Git

Este tutorial hablará sobre cómo deshacer un rebase realizado en una rama en Git.

Rebasar es la operación de mover la base de una rama a una base más nueva. Supongamos que tenemos una rama de funciones basada en la rama principal. Luego, la rama principal tiene algunas commits nuevas; es posible que deseemos reajustar la rama de funciones en función de esas nuevas.

Podemos repensar esta operación de rebase. Ya no queremos basar la nueva rama de funciones en las nuevos commits en la rama principal.

Queremos que la rama de características se base en los commits cuando la ramificamos por primera vez desde la rama principal. Por lo tanto, para lograr esto, ahora necesitamos deshacer la operación rebase realizada en la rama.

Ahora ilustraremos esto con un ejemplo.

Uso de git reflog y git reset para deshacer un rebase realizado en una rama en Git

Digamos que tenemos una rama main y hemos creado una nueva rama feature1 encima de ella.

Y digamos que se han producido algunas commits en la rama main. Hemos hecho una rebase de la nueva rama feature1 basada en esas nuevos commits. Esta es la operación que queremos deshacer.

Para deshacer el rebase, podemos usar el comando reflog de Git. Usando git reflog, podemos determinar el compromiso principal de la rama inmediatamente antes de que comience la rebase.

Ahora ejecutaremos el comando git reflog en la rama feature1 (una en la que se hizo rebase)

$ git reflog

b745978 HEAD@{0}: rebase: that commit
4sd7c1c HEAD@{1}: rebase: this commit
adf3d3d HEAD@{2}: checkout: moving from main to feature1
...

Podemos ver que HEAD@{2} fue el compromiso justo antes de la operación rebase.

Podemos usar git reset para restablecer la rama a este compromiso de la siguiente manera.

$ git reset HEAD@{2} --hard

Después de ejecutar el comando anterior, la rama feaure1 se encuentra ahora en un estado justo antes de la rebase.

Alternativamente, también se puede deshacer un rebase usando git reset de la siguiente manera.

$ git reset --hard ORIG_HEAD

El ORIG_HEAD se crea mediante comandos que mueven drásticamente su HEAD para registrar la posición del HEAD antes de su operación para que pueda cambiar fácilmente la punta de la rama al estado anterior a ejecutarlos.

La advertencia de este enfoque alternativo es que no se deberían haber realizado otras operaciones después de la rebase no deseada que pueda cambiar el ORIG_HEAD a saber. reset, rebase o merge.

Por lo tanto, podemos deshacer una rebase no deseada en una rama en Git a través de estos métodos.

Artículo relacionado - Git Rebase