Introdução
Básico
Branches
Merge/Rebase
Avançado
GitHub
CI/CD

Git Rebase: Reescrevendo o Histórico

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 que é Git Rebase?

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.

Quando usar Rebase vs. Merge

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

Rebase Básico

# 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

Rebase Interativo

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:

Exemplo de Rebase Interativo

# 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

Estratégias de Trabalho com Rebase

1. Pull com Rebase

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

2. Rebase antes de Pull Request

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

Resolução de Conflitos durante Rebase

  1. Quando um conflito ocorre, o Git pausa o rebase.
  2. Abra os arquivos conflitantes (marcados com <<<<<<< e >>>>>>>) e resolva os conflitos.
  3. Adicione as alterações (git add).
  4. Continue o rebase (git rebase --continue).
  5. Repita para cada commit com conflito.

Exercícios Práticos

Exercício: Limpar Histórico com Rebase

Objetivo: Usar rebase interativo para limpar uma série de commits

  1. Crie uma branch feature/rebase-exercicio
  2. Adicione 3-4 commits simples (pode ser apenas alterando um arquivo)
  3. Use rebase interativo para combinar (squash) os commits em um único commit com uma mensagem clara

Referências

← Voltar para página principal