Sobes.tech
Junior

Mi az a squash?

sobes.tech MI

Válasz az MI-től

A Git-ben a squash (összevonás) több commit egyesítését jelenti egyetlen commit-be. Ez lehetővé teszi a commit történet egyszerűsítését, rendezettebbé és olvashatóbbá tételét.

Általában a squash a következő esetekben történik:

  • Egy feature branch összevonása a fő ággal (feature branch merge). Egy rövid ág, sok kis commit-tal (hibajavítások, kozmetikai változtatások) összevonható egy nagyobb commit-ba, amely az egész funkciót reprezentálja.
  • A commit történet szerkesztése (interaktív rebase). Ez lehetővé teszi, hogy egymást követő commitokat egyesítsen, tisztább bemutatást adva a változásokról.

A squash folyamat általában a következő lépéseket tartalmazza:

  1. Commitok kiválasztása: A összevonandó commitok tartományának meghatározása.
  2. Szerkesztés (interaktív rebase): A git rebase -i <a tartomány előtti commit> vagy git rebase -i HEAD~<commitok száma> parancs használata.
  3. squash vagy s jelölés: A megnyíló szerkesztőben a commitokat, amelyeket össze akar vonni, squash vagy rövidítése s-vel jelölni. Az első commit a listában pick marad.
  4. Üzenet szerkesztése: A Git megnyit egy szerkesztőt, hogy írjon egy új üzenetet az összefűzött commit-hoz.
  5. Változtatások alkalmazása: A rebase történet és az új commit üzenet mentése után a Git végrehajtja az összevonást.

Példa az utolsó három commit interaktív rebase-re:

git rebase -i HEAD~3
# Egy szerkesztő nyílik meg, ahol a következő sorok lesznek:
# pick 08f66c1 Commit 1
# pick d7e8a23 Commit 2
# pick 1b2c3d4 Commit 3
# Módosítás:
# pick 08f66c1 Commit 1
# squash d7e8a23 Commit 2
# squash 1b2c3d4 Commit 3
# Mentés és kilépés. Ezután szerkessze az új commit üzenetét.

A squash előnyei:

  • Tiszta történet: Csökkenti a jelentéktelen commit-ok számát, így a változásnaplók áttekinthetőbbek lesznek.
  • Könnyebb keresés: Könnyebb megtalálni a fontos változásokat a történetben.
  • Könnyebb visszavonni: Egy nagyobb commit könnyebben visszavonható, mint sok kicsi.

Hátrányai:

  • Részletek elvesztése: A commit-ok összevonása során elveszhetnek az információk minden egyes kis lépésről.
  • Csapatmunkában bonyolultabb: A már közzétett commit-ok összevonása konfliktusokat okozhat a későbbi push-ok során. A közzétett commit-ok esetén git push --force használata szükséges, ami kockázatos lehet.

A squash használatát alaposan meg kell fontolni, és a csapat politikájától, valamint a projekt sajátosságaitól függ.