Corrigindo a origem de um branch com git rebase
O comando git rebase
pode ser usado para fazer vários ajustes de histórico, desde reescrever a árvore de commits, reescrevendo assim o histórico, até mesmo empurrar commits para um ponto mais a frente como se o branch fosse criado no futuro.
Nessa colinha vou te mostrar como usar git rebase
pra corrigir a origem de um determinado branch.
Criando uma branch a partir de um branch incorreto
Suponha que você tem duas tarefas para fazer nas próximas semanas e que você quer trabalhar em cada tarefa em uma branch diferente.
Então para trabalhar na tarefa 1 você cria uma branch com esse nome a partir do main
.
Digamos, que durante a sua implementação você cansou de mexer com aquele problema e decidiu que seria uma boa ideia mudar um pouco de contexto e iniciar a tarefa 2.
Para isso você precisa criar um novo branch também a partir do main
, no entanto, sem se dar conta você acabou criando o seu branch a partir do branch tarefa-1
:
E aí, começou a trabalhar e só se deu conta do erro mais tarde. Depois de fazer um commit no tarefa-2
o seu histórico parece algo assim:
Se você analisar o grafo do seu histórico pode ver que ele mostra que o commit mais recente (99247c
) no branch tarefa-2
depende do commit feito no branch tarefa-1
(5873c2
):
Então precisamos corrigir isso.
Corrigindo a origem do branch
Com esse erro nas mãos e como as implementações de cada tarefa é independente uma da outra você quer fazer essa correção.
Para isso você deve usar o git rebase
seguido da flag --onto
e o nome dos três branches, o comando por completo fica assim:
git rebase --onto main tarefa-1 tarefa-2
O resultado deverá ser semelhante a imagem abaixo:
Agora, tendo executado o comando acima, o seu histórico passa a ser o que deveria ser desde o princípio:
E se você conferir novamente o grafo do histórico, verá que apenas vemos os commits referentes a tarefa 2 no branch correspondente:
Três coisas são importantes de notar:
- Primeiro, que é sempre necessário dar os nomes dos três branches envolvidos para evitar perder commits;
- Segundo, que o agora o branch
tarefa-2
tem sua origem no branchmain
; - E terceiro, que o hash do commit no branch
tarefa-2
não é mais99247c
e sim952dc3
já que o commit mudou.
Com isso agora você sabe alterar ou corrigir a origem de um branch, caso queira mais detalhes sobre o comando git rebase
, recomendo a leitura da documentação do comando em português.
Abaixo você pode ver uma ficha que pode te ajudar a lembrar do comando git rebase --onto
: