Desfazer Rebase em Git

Azhar Bashir Khan 25 dezembro 2021 Git Git Rebase
Desfazer Rebase em Git

Este tutorial irá falar sobre como desfazer um rebase feito em um branch no Git.

Rebasing é a operação de mover a base de um galho para uma base mais nova. Suponha que temos um branch de recurso baseado no branch principal. Então, o branch principal tem alguns novos commits; podemos querer realocar o branch de recursos com base nesses novos.

Podemos repensar esta operação de rebase. Não queremos mais basear o novo branch de recursos nos novos commits no branch principal.

Queremos que o branch de recursos seja baseado nos commits quando o ramificamos pela primeira vez a partir do branch principal. Assim, para conseguir isso, agora precisamos desfazer a operação rebase feita no branch.

Vamos agora ilustrar isso com um exemplo.

Usando git reflog e git reset para desfazer um rebase feito em um branch no Git

Digamos que temos um branch main e criamos um novo branch feature1 em cima dele.

E vamos dizer que alguns commits aconteceram no branch main. Fizemos um rebase do novo branch feature1 baseado nesses novos commits. Esta é a operação que queremos desfazer.

Para desfazer o rebase, podemos usar o comando reflog do Git. Usando git reflog, podemos determinar o head commit do branch imediatamente antes do rebase começar.

Vamos agora executar o comando git reflog no branch feature1 (aquele em que rebase foi feito)

$ 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} foi o commit antes da operação de rebase.

Podemos usar git reset para redefinir o branch para este commit da seguinte maneira.

$ git reset HEAD@{2} --hard

Depois de executar o comando acima, o branch feaure1 está agora em um estado imediatamente antes do rebase.

Alternativamente, também se pode desfazer um rebase usando git reset como segue.

$ git reset --hard ORIG_HEAD

O ORIG_HEAD é criado por comandos que movem drasticamente o seu HEAD para gravar a posição do HEAD antes da sua operação, para que possa facilmente alterar a ponta do ramo de volta ao estado anterior à sua execução.

A advertência a esta abordagem alternativa é que nenhuma outra operação deveria ter sido feita após o não desejado rebase que pode alterar a viz. reset, rebase ou merge.

Assim, podemos desfazer um rebase indesejado em um branch no Git por meio desses métodos.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se

Artigo relacionado - Git Rebase