Sobes.tech
Junior

Ce este squash-ul?

sobes.tech AI

Răspuns de la AI

Squash-ul (zdrobit) în Git este combinarea mai multor commits într-unul singur. Permite simplificarea istoriei commits, făcând-o mai ordonată și mai ușor de citit.

De obicei, squash-ul se realizează în următoarele situații:

  • Fuziunea unei ramuri de caracteristici cu ramura principală (merge de feature branch). O ramură scurtă cu multe commits mici (corecții, modificări cosmetice) poate fi comprimată într-un commit mare, reprezentând întreaga funcționalitate a ramurii.
  • Editarea istoriei commits (rebase interactiv). Permite combinarea commits secvențiali pentru o prezentare mai curată a modificărilor.

Procesul de squash include de obicei:

  1. Selecția commits: Stabilirea intervalului de commits care trebuie combinate.
  2. Editarea (rebase interactiv): Utilizarea comenzii git rebase -i <commit anterior intervalului> sau git rebase -i HEAD~<număr de commits>.
  3. Marcarea squash sau s: În editorul care se deschide, marcați commits-urile care trebuie combinate cu cele anterioare, cu cuvântul squash sau abrevierea s. Primul commit din listă rămâne cu pick.
  4. Editarea mesajului: Git va deschide un editor pentru a scrie un nou mesaj pentru commit-ul combinat.
  5. Aplicarea modificărilor: După salvarea fișierului de istorie rebase și a fișierului de mesaj, Git va realiza combinarea.

Exemplu de rebase interactiv pentru combinarea ultimilor trei commits:

git rebase -i HEAD~3
# Se va deschide un editor cu linii precum:
# pick 08f66c1 Commit 1
# pick d7e8a23 Commit 2
# pick 1b2c3d4 Commit 3
# Se schimbă în:
# pick 08f66c1 Commit 1
# squash d7e8a23 Commit 2
# squash 1b2c3d4 Commit 3
# Se salvează și se închide. Apoi, se editează mesajul noului commit.

Avantajele squash-ului:

  • Istorie curată: Se reduce numărul de commits nesemnificativi, făcând log-urile de modificări mai ușor de înțeles.
  • Facilitează căutarea: Este mai ușor să găsești modificări importante în istorie.
  • Confort în revert: Un commit mare este mai ușor de anulat decât multiple mici.

Dezavantaje:

  • Pierdere de detalii: Combinarea commits-urilor duce la pierderea informațiilor despre fiecare pas mic.
  • Complexitate în colaborare: Combinarea commits-urilor deja trimise într-un depozit comun poate cauza conflicte la push-urile ulterioare. Pentru commits publicate, este necesar git push --force, ceea ce poate fi riscant.

Utilizarea squash trebuie făcută cu grijă și depinde de politica echipei și de specificul proiectului.