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 atualizar um branch.

Criando um histórico de exemplo

Suponha que você tem um projeto e estava trabalhando numa tarefa no branch tarefa-2, enquanto isso outra pessoa estava trabalhando no branch tarefa-1 que foi feito o merge para o main e assim tornando o branch main mais atualizado como mostrado no desenho abaixo:

desenho mostrando o estado corrente do histórico

Similarmente, o grafo do histórico deverá se mostrar como a imagem abaixo:

imagem mostrando o branch main com o histórico atualizado

Sabendo que o main está mais atualizado que o seu branch tarefa-2 e seguindo a boa prática de trabalhar sempre com o projeto mais atualizado, você decide que é hora de atualizar o seu branch de trabalho, que tem o histórico corrente assim:

imagem com o resultado do comando git log --graph mostrando o ramo tarefa-2 com histórico antes da atualização

Atualizando o branch atual

Existem algumas formas de atualizar o branch atual, uma delas é usando o git merge e fazendo o merge do branch mais atualizado, nesse caso o main, no branch que você quer atualizar nesse caso o tarefa-2. A outra forma é usando o rebase que vou te mostrar agora.

Tem duas formas de usar o rebase para fazer essa atualização, vamos ver a primeira que é estando no branch que você quer atualizar, então você precisa ir pro branch a ser atualizado, nesse caso o tarefa-2 e usar o rebase indicando o branch de origem das mudanças:

git checkout tarefa-2
git rebase main

Ao executar esses comandos você verá no seu terminal a mensagem avisando que a atualização foi feita com sucesso “Successfully rebased and updated refs/heads/tarefa-2.” (ou “Rebase e atualização das refs/heads/tarefa-2 bem sucedida.” em tradução livre) como você pode ver na imagem a seguir:

imagem com o resultado dos comandos anteriores

A segunda forma é independente do branch corrente, esse formato é um atalho para os dois comandos anteriores, basta usar o rebase, passar o branch de origem das mudanças seguido do branch de destino:

git rebase main tarefa-2

Esse comando também deverá mostrar a mesma mensagem da imagem anterior. Independentemente da forma escolhida para usar o rebase, o seu histórico deverá ser algo semelhante ao desenho abaixo:

desenho do histórico atualizado após o git rebase

E o grafo de histórico deverá se mostrar assim:

grafo de histórico após atualizar o ramo tarefa-2 com o rebase

Conclusão

Para finalizar temos uma coisa importante de notar agora que nosso branch está atualizado: o rebase só acontecerá sem interrupções, como mostrado nessa colinha, caso não existam conflitos, caso contrário o rebase será suspendido e os conflitos devem ser resolvidos antes de continuar.

Agora você sabe atualizar um branch usando o rebase, caso queira mais detalhes sobre o comando git rebase, recomendo a leitura da documentação do mesmo em português.

Abaixo você pode ver uma ficha que pode te ajudar a lembrar do comando git rebase para atualizar um branch: