Skip to content
Latchkey

O que é um fast-forward merge?

Um fast-forward merge acontece quando a branch alvo não se moveu desde que você criou sua branch, então o Git apenas desliza o ponteiro para frente, sem commit de merge.

Um fast-forward merge é o tipo mais simples. Se a branch na qual você está fazendo o merge não mudou desde que sua branch divergiu, não há nada a combinar; o Git pode apenas mover o ponteiro da branch alvo até o seu commit mais recente. O resultado é um histórico perfeitamente linear.

When a fast-forward is possible

Um fast-forward se aplica apenas quando a branch alvo é um ancestral direto da branch que está sendo mesclada, o que significa que o alvo não teve novos commits desde que você criou sua branch. Sem divergência, não há nada a reconciliar, então o Git simplesmente avança o ponteiro.

Fast-forward versus merge commit

Você pode solicitar ou proibir um fast-forward ao fazer o merge.

Controlling fast-forward behavior
git merge --ff-only feature/quick-fix
# or force a merge commit:
git merge --no-ff feature/quick-fix

Why it matters

Os fast-forward merges mantêm o histórico linear e livre de commits de merge extras, o que muitas equipes preferem pela legibilidade. A desvantagem é que o histórico não mostra mais que uma branch existiu. Algumas equipes forçam um commit de merge com no-ff para preservar esse registro, especialmente para rastrear pull requests.

Fast-forward merges and CI/CD

Um histórico linear, de fast-forward, é o mais fácil de raciocinar no CI: cada commit segue o anterior, então usar bisect em uma regressão e rastrear um deploy de volta a uma mudança é direto. Exigir que as branches estejam atualizadas antes do merge muitas vezes produz fast-forwards e garante que o CI testou exatamente o que entrou.

Choosing your strategy

  • Permita fast-forwards para o histórico linear mais limpo.
  • Use no-ff para sempre registrar que uma branch foi mesclada.
  • Exija que as branches estejam atualizadas para habilitar fast-forwards seguros.
  • Escolha uma convenção e aplique-a de forma consistente.

Principais conclusões

  • Um fast-forward merge apenas move o ponteiro da branch, sem commit de merge.
  • Ele exige que a branch alvo não tenha novos commits desde que você criou a sua.
  • O histórico linear dos fast-forwards facilita o bisect e o rastreamento no CI.

Guias relacionados