Junior
Co je to squash?
sobes.tech AI
Odpověď od AI
Git v squash (sloučení) znamená spojení několika commitů do jednoho. Umožňuje zjednodušit historii commitů, učinit ji přehlednější a čitelnější.
Obvykle se squash provádí při:
- Sloučení větve s hlavní větví (merge feature branch). Krátká větev s mnoha malými commity (opravy, kosmetické změny) může být sloučena do jednoho velkého commitu, který představuje veškerou funkčnost větve.
- Úpravě historie commitů (interaktivní rebase). Umožňuje spojit po sobě jdoucí commity pro čistší prezentaci změn.
Proces squash obvykle zahrnuje:
- Výběr commitů: Určení rozsahu commitů, které mají být sloučeny.
- Úprava (interaktivní rebase): Použití příkazu
git rebase -i <commit před rozsahem>nebogit rebase -i HEAD~<počet commitů>. - Označení
squashnebos: V otevřeném editoru označit commity, které mají být sloučeny s předchozím, slovemsquashnebo zkratkous. První commit v seznamu zůstává spick. - Úprava zprávy: Git otevře editor pro napsání nové zprávy pro sloučený commit.
- Aplikace změn: Po uložení historie rebase a souboru zprávy Git provede sloučení.
Příklad interaktivního rebase pro sloučení posledních tří commitů:
git rebase -i HEAD~3
# Otevře se editor s řádky jako:
# pick 08f66c1 Commit 1
# pick d7e8a23 Commit 2
# pick 1b2c3d4 Commit 3
# Změna na:
# pick 08f66c1 Commit 1
# squash d7e8a23 Commit 2
# squash 1b2c3d4 Commit 3
# Uložit a ukončit. Poté upravit zprávu nového commitu.
Výhody squash:
- Čistá historie: Snižuje počet méně významných commitů, což činí logy změn přehlednější.
- Snadnější hledání: Je jednodušší najít důležité změny v historii.
- Snadnější revert: Jeden velký commit je jednodušší vrátit zpět než mnoho malých.
Nevýhody:
- Ztráta detailů: Sloučení commitů vede ke ztrátě informací o každém malém kroku.
- Komplexnost týmové práce: Sloučení commitů, které již byly odeslány do sdíleného repozitáře, může způsobit konflikty při následných pushích. Pro publikované commity je nutné použít
git push --force, což může být riskantní.
Použití squash by mělo být pečlivě zváženo a závisí na politice týmu a specifikách projektu.