Merge - squash
Squash jest przełącznikiem polecenia git merge, którego rezultatem nie jest połączenie dwóch gałęzi, a zamiast tego nałożenie na indeks zmian wynikających z różnicy między dwoma gałęziami. Proces łączenia jest na tym etapie zatrzymywany i naniesienie zmian należy już do użytkownika.
Opcja ta jest bardzo przydatna w dwóch przypadkach:
- kiedy chcemy opublikować nasze zmiany lokalne związane z jakąś funkcjonalnością/naprawą błędu i nie chcemy "zaśmiecać" repozytorium zdalnego informacjami o każdej pojedynczej zmianie dokonanej w ramach naszej pracy
- kiedy w procesie review programista musiał dokonywać wielu zmian (commitów) i nie chcemy zmuszać go do ponownej publikacji nowego, czystego brancha
Załóżmy, że mamy branch z pewnymi commitami:
Tworzymy nowy branch (develop) i dodajemy pewne commity:
Teraz dokonujemy połączenia dwóch gałęzi za pomocą przełącznika squash:
git checkout master
git merge develop --squash
git commit -m "Some commit message"
Wynikiem będzie następująca historia brancha master: