Skip to main content

Divergência de branchs | Mesclagem | Git

  • Divergência de branchs | Mesclagem | Git

🧩 1. git config pull.rebase falseMERGE (padrão do Git)

  • O que faz: O Git faz um merge entre o que está no remoto e o que você tem localmente. Cria um novo commit de merge que junta as duas linhas de histórico.

  • Exemplo visual:

    Antes:
    Local: A - B
    Remoto: A - C
    Depois do pull (merge):
    \
    A - B ---- M
    \--- C

    O commit M é o merge commit que une tudo.

  • Vantagem: preserva o histórico exatamente como aconteceu.

  • Desvantagem: o histórico pode ficar cheio de commits de merge, meio “poluído”.


🧩 2. git config pull.rebase trueREBASE

  • O que faz: O Git “pega” seus commits locais e os reaplica por cima dos commits novos do remoto. É como se você tivesse feito seus commits depois dos commits do servidor.

  • Exemplo visual:

    Antes:
    Local: A - B
    Remoto: A - C
    Depois do pull (rebase):
    A - C - B'

    (O B' é seu commit reescrito, com novo hash.)

  • Vantagem: histórico linear, limpo e fácil de entender.

  • Desvantagem: reescreve commits (não é bom se outras pessoas já baixaram sua versão antiga).


🧩 3. git config pull.ff onlyFAST-FORWARD ONLY

  • O que faz: O Git só puxa (pull) se for possível avançar o ponteiro da branch sem precisar mesclar nada. Ou seja: só funciona se você não tiver feito commits locais ainda.

  • Exemplo visual:

    Antes:
    Local: A
    Remoto: A - B - C
    Depois do pull:
    Local: A - B - C
  • Vantagem: histórico totalmente linear, sem merges nem rebase.

  • Desvantagem: se você tiver commits locais, o pull vai falhar.

git merge --no-ff e git rebase

🧩 1. git merge --no-ff

👉 Faz uma mesclagem (merge) explícita.

  • Esse comando cria um novo commit de merge, mesmo que fosse possível fazer fast-forward.
  • “no-ff” significa “no fast-forward”.
🔍 Exemplo visual:
Antes:
Local: A - B
Remoto: A - C

Depois de:
git merge --no-ff origin/main

Resultado:
A - B ---- M
\--- C

O commit M é o merge commit, unindo os dois históricos.

🟢 Use quando quiser manter o histórico completo, mostrando claramente onde houve uma junção.


🧩 2. git rebase

👉 Faz um rebase dos seus commits locais sobre o remoto.

  • O rebase “reaplica” seus commits locais por cima do histórico remoto.
  • Assim, o histórico fica linear, como se você tivesse feito seus commits depois dos commits do servidor.
🔍 Exemplo visual:
Antes:
Local: A - B
Remoto: A - C

Depois de:
git rebase origin/main

Resultado:
A - C - B'

(B’ é uma cópia reescrita do commit B.)

🟢 Use quando quiser um histórico limpo e linear, sem commits de merge.


⚙️ 3. (Opcional) Desativar o aviso

Se você já entendeu o aviso e não quer que o Git mostre isso toda hora, pode desativá-lo com:

git config --global advice.diverging false

Mas só faça isso se você realmente souber o que está fazendo — o aviso é útil para lembrar que há divergência.


🧭 Em resumo

AçãoComandoResultado
Fazer merge explícitogit merge --no-ffMantém todo o histórico com commit de merge
Fazer rebasegit rebaseReescreve histórico para ficar linear
Desativar avisogit config advice.diverging falseSó esconde a mensagem, não resolve o problema

Se quiser, posso te mostrar um exemplo prático de passo a passo: 1️⃣ criar dois commits diferentes em local e remoto, 2️⃣ e depois ver como fica com merge e com rebase.


💡 Dicas práticas

SituaçãoMelhor opçãoComando sugerido
Você trabalha sozinho no repositóriorebase ou merge (tanto faz)git config --global pull.rebase true
Você trabalha em equipe e quer histórico limporebasegit config --global pull.rebase true
Você quer manter tudo exatamente como aconteceumergegit config --global pull.rebase false
Você nunca faz commits locais (só baixa)ff onlygit config --global pull.ff only