O Que É um Rebase no Git?
Um rebase move uma série de commits para uma nova base, reaplicando-os um por um para produzir um histórico linear e mais limpo.
O rebase é uma alternativa ao merge para integrar mudanças. Em vez de amarrar dois históricos com um merge commit, um rebase reescreve seus commits como se tivessem sido feitos sobre o branch de destino mais recente. O resultado é um histórico em linha reta que muitas equipes acham mais fácil de ler.
O que o rebase faz
O Git pega os commits exclusivos do seu branch, os separa, move seu branch para o tip do destino e reaplica seus commits um de cada vez. Como ele reescreve os hashes dos commits, o histórico parece que seu trabalho sempre veio depois da main mais recente.
Fazendo rebase sobre a main
Um workflow comum atualiza um branch de feature com a main mais nova antes de abrir ou finalizar um pull request.
git switch feature/api
git fetch origin
git rebase origin/mainRebase versus merge
Um merge preserva a verdadeira forma do histórico, incluindo quando os branches divergiram, enquanto um rebase produz uma história linear limpa ao custo de reescrever commits. Ambos são válidos; a escolha é em grande parte uma questão de preferência da equipe e do quanto você valoriza um registro exato versus um log arrumado.
Rebase e CI/CD
Fazer rebase de um branch antes do merge significa que a CI testa seu código contra a main mais recente, reduzindo surpresas onde um branch passou isoladamente mas quebrou uma vez combinado. Como o rebase reescreve os hashes dos commits, ele força um novo push e uma nova execução de pipeline, então os checks refletem a base atualizada.
A regra de ouro
- Faça rebase livremente do seu próprio trabalho ainda não enviado para arrumar o histórico.
- Evite fazer rebase de branches compartilhados que outros já puxaram.
- Faça force-push de branches reescritos apenas quando você for o dono deles.
- Rode a CI novamente após um rebase, já que os commits e a base mudaram.
Principais conclusões
- Um rebase reaplica seus commits sobre uma nova base para um histórico linear.
- Ele reescreve os hashes dos commits, então evite fazer rebase de branches compartilhados.
- Fazer rebase antes do merge testa seu código contra a main mais recente.