Sobes.tech
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:

  1. Výběr commitů: Určení rozsahu commitů, které mají být sloučeny.
  2. Úprava (interaktivní rebase): Použití příkazu git rebase -i <commit před rozsahem> nebo git rebase -i HEAD~<počet commitů>.
  3. Označení squash nebo s: V otevřeném editoru označit commity, které mají být sloučeny s předchozím, slovem squash nebo zkratkou s. První commit v seznamu zůstává s pick.
  4. Úprava zprávy: Git otevře editor pro napsání nové zprávy pro sloučený commit.
  5. 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.