git squash - ghdrako/doc_snipets GitHub Wiki
Squashowanie (squashing) w Gicie to sposób na połączenie wielu commitów w jeden. Przydaje się, gdy chcesz „posprzątać historię” przed wrzuceniem zmian na główne repozytorium – np. zamiast 10 commitów typu fix typo, another fix, added logging, zrobisz z nich jeden czysty commit: Add logging feature.
Squash = upchnięcie wielu commitów w jeden – tak jakbyś je „spłaszczył” w historii.
Kiedy warto squashować?
- Kończysz pracę na jakiejś funkcjonalności i masz dużo małych commitów.
- Robisz pull requesta i chcesz, by historia była czysta i zrozumiała.
- Chcesz uniknąć "śmieciowych" commitów typu fix, oops, debug, update.
Uzycie
Interaktywny rebase (najczęstszy sposób)
git rebase -i HEAD~3
Pojawi się edytor, np.:
pick 123abc First commit
pick 456def Second commit
pick 789ghi Third commit
Zmieniasz na:
pick 123abc First commit
squash 456def Second commit
squash 789ghi Third commit
(Słowo squash możesz też skrócić do s)
Squash przy mergowaniu gałęzi
Jeśli robisz merge, możesz od razu squashować:
git merge --squash feature-branch
To:
- nie robi normalnego commita z historią,
- tylko zbiera całą zawartość z feature-branch i tworzy jeden commit do zatwierdzenia. Potem wystarczy:
git commit -m "Add new feature"
⚠️ Uwaga
- Squash zmienia historię commitów, więc nie rób tego na branchu, który inni już pobrali i pracują na nim.
- Jeśli pracujecie zespołowo, squashuj przed pushem, albo użyj --force (git push --force) z rozwagą.