Git squash = combinar vários commits num ÚNICO commit.
Analogia: tem 5 rascunhos de um email → combina-os num email final limpo.
Exemplo:
ANTES do squash:
- "fix typo"
- "add feature"
- "fix bug"
- "another fix"
DEPOIS do squash:
- "Add complete login feature"Problema: histórico sujo
git log --oneline
abc123 oops fix typo
def456 forgot semicolon
ghi789 actually implement feature
jkl012 fix indent
mno345 real commit messageSolução: Squash!
git log --oneline
xyz999 Implement user authentication systemVantagens:
O comando mágico:
git rebase -i HEAD~4 # Squash os 4 últimos commitsInterface que se abre:
pick abc123 oops fix typo
pick def456 forgot semicolon
pick ghi789 actually implement feature
pick jkl012 fix indentMude para:
pick ghi789 actually implement feature
squash abc123 oops fix typo
squash def456 forgot semicolon
squash jkl012 fix indentResultado: 4 commits → 1 commit limpo!
mkdir demo-squash && cd demo-squash
git init
# Criar vários commits "sujos"
echo "print('v1')" > app.py && git add . && git commit -m "start feature"
echo "print('v1.1')" > app.py && git add . && git commit -m "oops fix"
echo "print('v1.2')" > app.py && git add . && git commit -m "another fix"
echo "print('v2 done')" > app.py && git add . && git commit -m "feature complete"
# Histórico sujo
git log --oneline
# Squash interativo
git rebase -i HEAD~4
# No editor: manter o primeiro "pick", mudar os outros para "squash"
# Guardar e fechar
# Escrever a mensagem do commit final
# Resultado: 1 commit limpo!
git log --onelineSituações típicas:
Feature branch antes do merge:
git checkout feature-login
# ... 15 commits de desenvolvimento com typos/fixes
git rebase -i HEAD~15 # Squash em 2-3 commits lógicos
git checkout main && git merge feature-loginLimpar antes do push:
# Desenvolvimento local em rascunho
git rebase -i HEAD~8 # Limpar antes de partilhar
git push origin feature-branchCorrigir o histórico público (atenção!):
# Só se ninguém tiver ainda obtido os seus commits
git rebase -i HEAD~5
git push --force-with-lease # Mais seguro que --forceSquash = o seu aspirador para limpar o histórico!