Objetivo do git rebase é simples: mudar a referência do seu branch atual em função do branch de origem, ou permitir a edição de alguns commits mais antigos que o último commit. É possível por exemplo editar mensagens de commits antigas, mudar a ordem de commits, juntar vários commits em apenas um, etc.
No seu uso mais simples, o rebase serve para atualizar o branch atual. Vamos supor que temos um branch feature
com 2 commits, e ele deriva do branch master
. Para atualizarmos esse branch só precisamos:
- Não ter nenhum arquivo pendente para ser commitado.
- Estar no branch
feature
. Podemos trocar para esse branch comgit checkout feature
. - Rodar o comando
git rebase master
para indicar que queremos atualizar o branch que estamos, comparando-o com o branchmaster
.
Git então irá retroceder até o commit em comum entre ambos os branches, aplicar todos os commits do master, seguindo de todos os commits no branch atual. Um exemplo do resultado é mostrado na figura abaixo:
Alguns podem se perguntar: e porque não usar o git merge
?
Podemos, mas ele iria poluir bastante (e de forma desnecessária) o histórico de commits.
Se fizermos o merge do master
para feature
ele iria copiar os commits C e D, para depois de F, além de gerar um commit indicando que foi realizado merge. Quando quisermos carregar as mudanças do branch feature
para master
(através de um merge), teremos N commits de merge (1 para cada vez que atualizamos nosso branch feature
).
Por isso rebase é uma opção mais interessante. Ele mantém o histórico de commits mais limpos. Apenas duas coisas muito importantes sobre rebase:
-
Faça rebase apenas em commits de branches onde você é o único desenvolvedor - Porque? Mudando a referência (hash do commit) de branches públicos (master, homologação, dev), quando outros desenvolvedores tentarem atualizar seu repositório, eles terão problemas para commitar.
-
Dentro do seu branch, depois do rebase utilize o commando
git push --force-with-lease
para atualizar as referências na cópia do seu branch remoto. Isso irá verificar com segurança que você é a única pessoa utilizando aquele branch, e atualizar o remoto.
Fonte da imagem e leitura complementar:
https://medium.freecodecamp.org/git-rebase-and-the-golden-rule-explained-70715eccc372