Sobes.tech
Junior

O que significa fazer um rebase na branch principal?

sobes.tech IA

Resposta da IA

Executar git rebase main a partir do ramo atual significa mover o ponto de referência do seu ramo para o último commit de main.

Isto acontece da seguinte forma:

  1. O Git guarda temporariamente os commits do seu ramo atual que surgiram após o ponto em que se ramificou de main.
  2. O seu ramo atual é redefinido para o estado do ramo main.
  3. Os commits guardados são aplicados sequencialmente sobre o último commit de main.

Principais diferenças em relação ao merge:

Característica Rebase Merge
História Linear, sem commits de fusão Não linear, com commits de fusão
Clareza da história Mais limpa, mais fácil de entender Pode ser mais difícil de entender
Conflitos Resolvidos para cada commit individualmente Resolvidos uma vez para todas as alterações
Aplicação Preferido para ramos pequenos e pessoais Preferido para integrar ramos públicos

Exemplo:

História inicial:

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

Após git checkout feature e git rebase main:

A -- B -- C (main)
           \
            D' -- E' (feature)

Onde D' e E' são os commits D e E com uma nova referência de pai.

Problemas possíveis:

  • Conflitos: Podem surgir ao aplicar cada commit.
  • Reescrita da história: rebase altera os IDs dos commits. Isto é perigoso se fizer rebase de um ramo que já foi publicado e no qual outros desenvolvedores trabalham. Nesse caso, pode ser necessário fazer um push forçado (git push --force), o que deve ser feito com cautela.