Você já domina os fundamentos das branches: criar, alternar, trabalhar e fazer merge. No entanto, o Git oferece ferramentas mais avançadas para gerenciar o histórico de branches de forma mais limpa e flexível. Este capítulo vai introduzir o git rebase para um histórico linear, o git stash para salvar trabalho temporário e o git cherry-pick para selecionar commits específicos.



6.1 git rebase: Mantendo o Histórico Linear ✨

O git merge que usamos no Capítulo 4 é excelente para combinar branches. Ele cria um novo commit (o merge commit) que une os históricos de duas branches. Isso é bom, mas em um histórico muito ativo, pode criar um "emaranhado" de merges que dificulta a leitura do git log --graph.

O git rebase oferece uma alternativa: ele reaplica os commits da sua branch em cima da branch de destino, como se você tivesse começado a trabalhar nela a partir do ponto mais recente da branch principal. Isso resulta em um histórico de commits linear e mais limpo.

Quando usar git rebase?

Como funciona o git rebase?

Imagine que você tem uma branch feature/X que se ramificou da main. Enquanto você trabalha na feature/X, a main recebe novos commits.

Antes do rebase:

--A---B---C (main)
\
D---E (feature/X)

Depois do rebase de feature/X em main:

--A---B---C---D'---E' (main e feature/X)

Os commits D e E são "reapresentados" como D' e E' em cima do commit C. Eles têm novos hashes e uma nova base.

Exemplo de git rebase:

  1. Crie uma nova branch para uma funcionalidade:

    git checkout main
    git checkout -b feature/rebase-exemplo
    
  2. Faça alguns commits na feature/rebase-exemplo:

    echo "Funcionalidade A" > feature_a.txt
    git add feature_a.txt
    git commit -m "Adiciona feature A"
    
    echo "Funcionalidade B" > feature_b.txt
    git add feature_b.txt
    git commit -m "Adiciona feature B"