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ą.