Objetivo: Aprender a usar o Git Rebase para manter um histórico linear e limpo, entendendo quando é apropriado usá-lo e os cuidados necessários.
O git rebase
é uma operação que "reaplica" commits de uma branch sobre outra. Em vez de criar um commit de merge (como faz o git merge
), o rebase reorganiza o histórico para que pareça que você sempre trabalhou na branch de destino.
⚠️ CUIDADO: Rebase reescreve o histórico. Nunca faça rebase em commits que já foram enviados para repositórios públicos ou branches compartilhadas com outras pessoas.
Use Rebase quando: | Use Merge quando: |
---|---|
Quer manter um histórico linear e limpo | Quer preservar todo o histórico exatamente como aconteceu |
Está trabalhando em uma branch local não compartilhada | Está mesclando branches públicas ou compartilhadas |
Quer incorporar mudanças da branch principal à sua branch de feature | Quer finalizar uma feature branch na branch principal |
# Cenário: Você está trabalhando na branch feature/login e
# deseja incorporar as atualizações recentes da branch main
# Primeiro, certifique-se de estar na branch que deseja rebasear
git checkout feature/login
# Execute o rebase
git rebase main
# Se houver conflitos, o Git pausará o rebase para você resolvê-los
# Depois de resolver cada conflito:
git add arquivo-resolvido
git rebase --continue
# Para cancelar um rebase em andamento
git rebase --abort
O rebase interativo é uma ferramenta poderosa que permite reorganizar, combinar, renomear ou até remover commits antes de aplicá-los.
# Rebase interativo dos últimos 3 commits
git rebase -i HEAD~3
Isso abrirá um editor de texto com opções para cada commit:
pick
- manter o commit como estáreword
- manter o commit, mas alterar a mensagemedit
- pausar para alterar o commit (conteúdo e/ou mensagem)squash
- combinar com o commit anterior (mantendo as mensagens)fixup
- combinar com o commit anterior (descartando a mensagem)drop
- remover o commit# Antes do rebase, sua branch pode ter commits como:
a123456 fix: corrige erro de digitação
b789012 fix: ajusta estilo do botão
c345678 feat: implementa login
# Após executar git rebase -i HEAD~3, você pode mudar para:
pick c345678 feat: implementa login
squash b789012 fix: ajusta estilo do botão
squash a123456 fix: corrige erro de digitação
# O resultado será um único commit combinado
Uma boa prática para manter seu histórico local limpo quando puxa atualizações do remoto:
# Em vez de git pull padrão
git pull --rebase origin main
# Configurar como padrão para uma branch
git config branch.main.rebase true
Mantenha sua feature branch sempre atualizada com a principal:
# Mantenha sua branch main atualizada
git checkout main
git pull
# Volte para sua feature branch e rebase
git checkout feature/login
git rebase main
# Force-push se necessário (com cuidado!)
git push --force-with-lease
<<<<<<<
e >>>>>>>
) e resolva os conflitos.git add
).git rebase --continue
).Objetivo: Usar rebase interativo para limpar uma série de commits
feature/rebase-exercicio
← Voltar para página principal