Pro Git ⬇ PDF
Pro Git · Eduspaces ·
https://eduspaces.ro/s/pro-git/capitol/s-3/?pdf=1

🌿 3. Git Branching

Ramurile ca pointeri ieftini, HEAD, fuziunea, conflictele, ramurile la distanță și rebase-ul.

nivel 1

Bază (13)

1
Branching· proces · p. 69

Ramificarea: te desparți de linia principală de dezvoltare și continui să lucrezi fără să o afectezi. În Git este extrem de ușoară — aproape instantanee — și este considerată „killer feature”-ul lui.

2
Branch· referință · p. 70

O ramură în Git este doar un pointer ușor și mobil către un commit; la fiecare commit pointerul ramurii curente avansează automat. Fiind un simplu fișier cu SHA-1-ul commit-ului (41 de octeți), se creează și se șterge foarte ieftin.

3
git branch· comandă · p. 71

Creează o ramură nouă — un pointer nou la commit-ul curent — fără să treacă pe ea. Fără argumente listează ramurile ( marchează ramura curentă); -v, --merged, --no-merged, -d / -D (ștergere), --move (redenumire), -vv (urmărirea).

4
git checkout· comandă · p. 72

Trece pe o ramură existentă: mută HEAD și readuce fișierele din working directory la snapshot-ul acelei ramuri; git checkout -b <ramură> creează o ramură și trece pe ea.

5
Fast-forward· proces · p. 79

Fuziunea în care commit-ul de integrat se află direct înaintea celui curent (poate fi atins urmând istoria lui), așa că Git doar mută pointerul înainte — nu există muncă divergentă de combinat.

6
git merge· comandă · p. 79

Integrează în ramura curentă munca altei ramuri: dacă este posibil face fast-forward, altfel o fuziune cu trei căi încheiată cu un merge commit.

7
Merge· proces · p. 79

Unul dintre cele două moduri principale de integrare a modificărilor dintr-o ramură în alta (celălalt este rebase): ia capetele ramurilor și le combină, fie prin fast-forward, fie printr-o fuziune cu trei căi.

8
Three-way merge· proces · p. 81

Fuziunea făcută când istoriile au divergent: Git folosește cele două snapshot-uri indicate de capetele ramurilor și strămoșul lor comun, creează un snapshot nou și un merge commit.

9
Remote-tracking branch· referință · p. 92

Referință locală, pe care nu o poți muta, la starea unei ramuri din depozitul la distanță; Git o actualizează la fiecare comunicare în rețea. Are forma <remote>/<branch>, de exemplu origin/master — un semn de carte pentru ultima conectare.

10
Tracking branch· referință · p. 98

Ramură locală cu o relație directă cu o ramură la distanță (upstream); se creează automat când extragi o ramură dintr-o ramură remote-tracking (de exemplu cu --track), iar git pull știe de unde să aducă și ce să integreze.

11
Rebase· proces · p. 101

Al doilea mod de integrare: iei modificările introduse de commit-urile unei ramuri și le reaplici, în ordine, peste altă ramură. Rezultatul final e același snapshot ca la merge, dar istoria devine liniară, mai curată.

12
git rebase· comandă · p. 102

Merge la strămoșul comun, salvează diff-urile introduse de fiecare commit al ramurii curente, resetează ramura la commit-ul țintă și aplică pe rând modificările; --onto reaplică pe altă bază, -i face rebase interactiv.

13
Perils of rebasing· regulă · p. 106

Regula rebase-ului: nu face rebase pe commit-uri care există în afara depozitului tău și pe care alții și-au putut baza munca — rebase-ul abandonează commit-uri și creează altele similare, dar diferite, iar colaboratorii trebuie să își reintegreze munca.

nivel 2

Aprofundare (12)

1
Divergent history· concept · p. 74

Istoria se bifurcă atunci când pe două ramuri s-au făcut commit-uri noi pornind de la același punct; modificările rămân izolate pe ramuri până când le integrezi.

2
git switch· comandă · p. 76

Din Git 2.23, alternativă la git checkout pentru ramuri: git switch <ramură> trece pe o ramură existentă, -c (--create) creează și trece pe una nouă, git switch - revine la ramura anterioară.

3
Common ancestor· concept · p. 81

Cel mai recent commit comun al două ramuri, folosit ca bază la fuziunea cu trei căi și la rebase; Git îl găsește automat datorită pointerilor spre părinți.

4
Conflict-resolution markers· concept · p. 83

Markerii <<<<<<<, ======= și >>>>>>> adăugați de Git în fișierele în conflict: deasupra este versiunea din HEAD, dedesubt cea din ramura integrată. După rezolvare se șterg, iar git add marchează fișierul ca rezolvat.

5
git mergetool· comandă · p. 84

Lansează un instrument vizual de fuziune care te ghidează prin conflicte; la final, dacă fuziunea a reușit, pune fișierul în staging ca rezolvat.

6
Branching workflow· flux de lucru · p. 88

Moduri obișnuite de a folosi ramurile, posibile datorită ramificării ușoare: ramuri de lungă durată pentru niveluri de stabilitate și ramuri de topic pentru fiecare funcționalitate.

7
Long-running branch· flux de lucru · p. 88

Ramură mereu deschisă, folosită pentru o etapă a ciclului de dezvoltare (de exemplu master doar cu cod stabil, develop sau next pentru testare, pu pentru actualizări propuse), în care se integrează regulat alte ramuri.

8
Remote branch· referință · p. 91

Ramură aflată într-un depozit la distanță; o ramură locală se publică explicit cu git push <remote> <branch> și se șterge de pe server cu git push <remote> --delete <branch>.

9
Remote reference· referință · p. 91

Referințe (pointeri) din depozitele la distanță — ramuri, etichete etc.; lista completă se obține cu git ls-remote <remote> sau git remote show <remote>.

10
Upstream branch· referință · p. 99

Ramura urmărită de o ramură de urmărire; se setează cu git branch -u (--set-upstream-to) și se poate referi prescurtat cu @{upstream} sau @{u}; git branch -vv arată cu cât ești înainte sau în urmă.

11
git pull --rebase· comandă · p. 109

Variantă a lui git pull care face rebase în loc de merge; poate fi făcută implicită cu git config --global pull.rebase true și ajută după ce cineva a forțat un push cu commit-uri rescrise.

12
Rebase vs. merge· concept · p. 109

Alegerea depinde de ce înseamnă istoria pentru echipă: o înregistrare a ce s-a întâmplat (merge) sau povestea coerentă a proiectului (rebase). Compromisul recomandat: rebase pe modificările locale înainte de push, niciodată pe ce ai publicat.

nivel 3

Detaliu (1)