Perche fare squash
Un branch di feature spesso accumula commit "WIP", "fix typo" e "address review" che seppelliscono l'intento. Lo squash li condensa in un piccolo numero di commit logicamente significativi prima del merge.
Squash al merge
git checkout main
git merge --squash feature
git commit -m "Add feature X"
Squash con rebase interattivo
git rebase -i main
Cambiare pick in squash o fixup.
Workflow autosquash
git commit --fixup=<sha>
git commit --squash=<sha>
git rebase -i --autosquash main
Riordinare per chiarezza
Durante il rebase interattivo, scambiare le righe per riordinare. Un pattern utile: avvicinare le modifiche correlate.
Dividere commit troppo grandi
git reset HEAD^
git add -p src/parser.c
git commit -m "Refactor parser"
git add -p src/runtime.c
git commit -m "Refactor runtime"
git rebase --continue
Errori comuni
Squash di un merge condensa due branch in un mega-commit, spesso involontariamente. Squash di commit gia pushati costringe i collaboratori a rebase.
Preservare gli autori
git commit -m "Add feature X
Co-authored-by: Alice <[email protected]>
Co-authored-by: Bob <[email protected]>"