Menu
Coddy logo textTech

Git: Squash de Commits

Última atualização

O squash combina vários commits em um só, de modo que uma sequência bagunçada de commits "wip", "corrige erro de digitação", "agora vai" vira um único commit limpo. A ferramenta usual é o rebase interativo - git rebase -i - onde você marca os commits que quer unir. Como o squash reescreve o histórico, faça isso antes do push, ou em um branch em que só você está trabalhando.

Experimente estes comandos no terminal playground - um shell real no seu navegador, sem precisar instalar nada.

O squash dobra uma sequência de commits pequenos em um único commit limpo via rebase interativo.

Sintaxe

CommandWhat it does
git rebase -i HEAD~3Faz rebase interativo dos últimos 3 commits
git rebase -i mainFaz rebase de todos os commits desde main
git merge --squash featureCombina os commits de um branch em um só ao fazer merge
git reset --soft HEAD~3 && git commitFaz squash dos últimos 3 commits sem rebase

Comandos do rebase interativo

No editor que abre, troque pick por um destes.

KeywordWhat it does
pickMantém o commit como está
squash (s)Une ao commit anterior e mescla as mensagens
fixup (f)Une, mas descarta a mensagem deste commit
reword (r)Mantém o commit, mas edita sua mensagem

Exemplo prático

Faça squash dos últimos três commits em um antes do push.

StepActionResult
1git rebase -i HEAD~3Abre os últimos 3 commits no editor
2Defina os commits 2 e 3 como squashMarca-os para serem unidos ao primeiro
3Salve e edite a mensagem combinadaTrês commits viram um commit limpo

Perguntas frequentes sobre squash de commits no Git

Como faço squash dos últimos N commits no Git?
Execute git rebase -i HEAD~N (por exemplo HEAD~3 para os últimos três). No editor, deixe o primeiro commit como pick e troque o restante para squash (ou fixup para descartar suas mensagens). Salve, edite a mensagem de commit combinada e os commits se juntam em um só.
Qual é a diferença entre squash e fixup?
Ambos unem um commit ao anterior. O squash mantém a mensagem do commit e permite combiná-la com as outras em um editor. O fixup descarta a mensagem do commit por completo, mantendo apenas a do commit anterior - útil para commits de "opa, pequena correção" que você não quer na mensagem final.
Como faço squash de um branch inteiro ao fazer merge?
Use git merge --squash feature e depois git commit. Isso aplica todas as mudanças do branch como mudanças em stage e permite registrá-las como um único commit no branch de destino, sem trazer os commits individuais do branch. O botão "Squash and merge" do GitHub faz a mesma coisa.
Posso fazer squash sem um rebase interativo?
Sim. git reset --soft HEAD~N volta o branch N commits mantendo todas as mudanças em stage, e então um único git commit as registra como uma só. É uma forma rápida de fazer squash dos commits mais recentes sem abrir o editor de rebase.
Posso praticar isso online?
Sim. Abra o terminal playground para rodar o rebase interativo em um shell real no seu navegador - sem precisar instalar nada. O curso interativo e gratuito de Git da Coddy também cobre rebase e limpeza de histórico passo a passo.
Coddy programming languages illustration

Aprenda Git com a Coddy

COMEÇAR