Sobes.tech
Junior

Čo je squash?

sobes.tech AI

Odpoveď od AI

Squash (squashing) v Git je združevanje več commitov v enega. Omogoča poenostavitev zgodovine commitov, da je bolj urejena in berljiva.

Običajno se squash izvaja pri:

  • združevanju veje z glavno (feature branch merge). Kratka veja z veliko majhnimi commitmi (popravki, kozmetične spremembe) se lahko združi v en velik commit, ki predstavlja celotno funkcionalnost veje.
  • urejanju zgodovine commitov (interactive rebase). Omogoča združevanje zaporednih commitov za bolj čisto predstavitev sprememb.

Proces squashing običajno vključuje:

  1. Izbor commitov: Določitev obsega commitov, ki jih je treba združiti.
  2. Urejanje (interaktivni rebase): Uporaba ukaza git rebase -i <commit pred obsegom> ali git rebase -i HEAD~<število_commitov>.
  3. Označevanje squash ali s: V odprtem urejevalniku označiti commit, ki ga je treba združiti s prejšnjim, z besedo squash ali skrajšavo s. Prvi commit na seznamu ostane z pick.
  4. Urejanje sporočila: Git bo odprl urejevalnik za pisanje novega sporočila za združeni commit.
  5. Uveljavljanje sprememb: Po shranjevanju datoteke zgodovine rebase in datoteke sporočila novega commita bo Git izvedel združevanje.

Primer interaktivnega rebase za združevanje zadnjih treh commitov:

git rebase -i HEAD~3
# Odprl se bo urejevalnik z vrsticami, kot so:
# pick 08f66c1 Commit 1
# pick d7e8a23 Commit 2
# pick 1b2c3d4 Commit 3
# Spremeni se v:
# pick 08f66c1 Commit 1
# squash d7e8a23 Commit 2
# squash 1b2c3d4 Commit 3
# Shranite in zapustite. Nato uredite sporočilo novega commita.

Prednosti squasha:

  • Čista zgodovina: Zmanjša število nepomembnih commitov, da so dnevniki sprememb bolj razumljivi.
  • Poenostavitev iskanja: Lažje je najti pomembne spremembe v zgodovini.
  • Udobje za razveljavitev: En velik commit je lažje razveljaviti kot mnogo majhnih.

Slabosti:

  • Izguba podrobnosti: Združevanje commitov vodi v izgubo informacij o vsakem posameznem majhnem koraku.
  • Zapletenost pri sodelovanju: Squash commitov, ki so že bili poslani v skupni repozitorij, lahko povzroči konflikte pri kasnejših pushih drugih članov ekipe. Pri squash objavljenih commitih je potrebno uporabiti git push --force, kar je lahko tvegano.

Uporaba squasha mora biti premišljena in odvisna od politike ekipe in specifičnosti projekta.