Skip to content
Latchkey

O que é um squash merge?

Um squash merge colapsa todos os commits de uma branch em um único commit ao fazer o merge, dando à branch principal um histórico organizado, com um commit por mudança.

Um squash merge é uma forma de manter a branch principal limpa. Em vez de trazer cada commit bagunçado de trabalho em andamento de uma feature branch, ele os combina em um único commit no momento do merge. O histórico detalhado da branch desaparece em favor de uma única mudança bem descrita.

What squashing does

Quando você faz squash e merge, o Git pega todas as mudanças da branch e as registra como um único novo commit na branch alvo. Os commits individuais da branch não são carregados; apenas o efeito combinado deles é, sob uma única mensagem que você geralmente escreve no momento do merge.

Squash merging a pull request

A maioria das plataformas oferece o squash como opção de merge; pela CLI, você pode fazer o squash antes de fazer o merge.

Squashing a branch into one commit
git switch main
git merge --squash feature/cleanup
git commit -m "Add cleanup utility"

The tradeoffs

O squash dá a main um histórico limpo e linear de mudanças significativas, fácil de escanear e de fazer bisect. O custo é perder o histórico de commits granular da branch, o que pode importar se esses passos intermediários eram valiosos. Para a maioria das equipes, a organização vale a pena.

Squash merges and CI/CD

Um histórico limpo de um commit por feature facilita usar bisect para reduzir uma falha de CI a uma única mudança autocontida e revertê-la de forma limpa, se necessário. Como cada merge é um commit, mapear uma execução de pipeline ou um deploy de volta à mudança que ele enviou fica mais simples e menos ambíguo.

When to squash

  • Faça squash para manter main legível quando o histórico da branch estiver barulhento.
  • Escreva uma mensagem final clara resumindo toda a mudança.
  • Prefira o squash para pull requests pequenos e de propósito único.
  • Evite-o quando os commits intermediários carregarem valor real.

Principais conclusões

  • Um squash merge colapsa uma branch em um único commit no alvo.
  • Ele mantém main limpa, mas descarta o histórico detalhado da branch.
  • Um histórico de um commit por mudança simplifica o bisect e o revert no CI.

Guias relacionados