Comandos do Git

git rebase

git rebase: reaplica commits de uma branch em cima de outra branch.

O comando git rebase serve para mover ou combinar uma sequência de commits sobre um novo commit de base. Diferente do git merge, que cria um commit de merge para combinar duas branches, o rebase pega os commits da sua branch atual e os reaplica em cima de outra branch, criando um histórico de commits linear.

O rebase é especialmente útil para manter um histórico de projeto limpo e linear. Em vez de criar uma "salada de commits", com commits de branches diferentes intercalados, o rebase garante que os commits da sua feature apareçam como se tivessem sido desenvolvidos diretamente em cima das alterações mais recentes da branch de destino.

GIT REBASE
1 / 37

Existem dois tipos principais de rebase:

  1. Rebase comum (padrão):

    • Procurar um commit ancestral comum entre a sua branch atual e a branch de destino.
    • Salvar temporariamente os commits que só existem na sua branch atual.
    • Mover o ponteiro da sua branch atual para o commit mais recente da branch de destino.
    • Reaplicar, um por um, os commits salvos em cima do commit mais recente da branch de destino.

    Na prática, isso faz parecer que você criou a sua branch a partir do commit mais recente da branch de destino, e não daquele commit lá atrás de onde ela saiu originalmente.

  2. Rebase interativo (git rebase -i): mostra uma interface em que você pode editar, reordenar, dar squash ou descartar commits durante o processo de rebase. Talvez o recurso mais poderoso do Git.

O rebase reescreve o histórico de commits criando commits novos com as mesmas alterações, mas com hashes de commit diferentes. Isso significa que você nunca deve fazer rebase de commits que já foram compartilhados com outras pessoas, porque isso pode causar confusão e conflitos para quem colabora com você.


Pull com rebase

Por padrão, rodar git pull é, na prática, uma combinação de git fetch seguido de git merge. A etapa de merge pode criar um commit de merge inútil na branch atual. Repita isso várias vezes durante o desenvolvimento de uma feature e você acaba com um histórico de commits bagunçado, o que vai deixar o merge final especialmente complicado.

O que você quer de verdade é pegar as alterações mais recentes da branch remota e colocar todos os seus commits recentes em cima delas. Dá para fazer isso com git pull --rebase.

Mas adicionar essa opção toda vez é chato, então você pode usar o git config para fazer o git pull usar o git rebase por padrão:

Executar no terminal:
git config pull.rebase true


Exemplos

(útil quando você está em uma branch de feature ou outra branch) Faça rebase da branch atual sobre a main:

git rebase main

Inicie um rebase interativo dos últimos 3 commits (por exemplo, para reordená-los ou dar squash e juntá-los em um único commit):

git rebase -i HEAD~3

Continue um rebase depois de resolver os conflitos de merge:

git add .
git rebase --continue

Aborte um rebase e volte ao estado original:

git rebase --abort

Atualize a sua branch atual com as alterações mais recentes da main (pegue a branch main e coloque todos os seus commits em cima dela):

git fetch origin
git rebase origin/main

Defina o rebase como comportamento padrão do git pull:

git config pull.rebase true