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.
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.
git rebase?main) na sua branch de funcionalidade antes de fazer o merge final.git rebase apenas em branches que não foram compartilhadas com outros desenvolvedores (ou seja, que ainda não foram enviadas para um repositório remoto público). O rebase reescreve o histórico de commits, e isso pode causar grandes problemas de sincronização se outras pessoas já tiverem baseado seu trabalho nos commits originais da sua branch.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.
git rebase:Crie uma nova branch para uma funcionalidade:
git checkout main
git checkout -b feature/rebase-exemplo
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"