Pro Git ⬇ PDF
Pro Git · Eduspaces ·
https://eduspaces.ro/s/pro-git/capitol/s-7/

🧰 7. Git Tools

Unelte avansate: selectarea reviziilor, stash, rescrierea istoricului, reset, fuziuni avansate, submodule.

nivel 1

Bază (10)

1
Commit· obiect · p. 224

Înregistrarea, în istoric, a snapshot-ului pregătit în staging area, cu autorul, mesajul și pointeri către commit-ul sau commit-urile părinte; este identificat prin checksum-ul SHA-1 și poți reveni oricând la el sau compara cu el.

2
Merge commit· obiect · p. 224

Commit creat automat la o fuziune cu trei căi, special prin faptul că are mai mult de un părinte.

3
Commit history· concept · p. 226

Succesiunea commit-urilor unui depozit, legate prin pointeri spre părinți; se vizualizează cu git log. Pentru unii este o înregistrare a ce s-a întâmplat cu adevărat, pentru alții povestea felului în care a fost făcut proiectul.

4
git stash· comandă · p. 236

git stash (git stash push) salvează modificările neterminate, git stash list arată stiva, git stash apply le reaplică (stash@{2} pentru una mai veche), git stash drop șterge, iar git stash pop aplică și șterge.

5
Stashing· proces · p. 236

Stash-ul preia starea „murdară” a working directory — fișierele urmărite modificate și modificările din staging — și o salvează pe o stivă de modificări neterminate, pe care o poți reaplica oricând, chiar pe altă ramură.

6
Merge conflict· fenomen · p. 237

Apare când aceeași parte a aceluiași fișier a fost modificată diferit în cele două ramuri: Git oprește fuziunea fără să creeze merge commit-ul, iar fișierele în conflict apar ca unmerged până le rezolvi și le pui în staging.

7
HEAD· referință · p. 257

Pointer special care arată ramura locală pe care te afli; git checkout îl mută pe altă ramură. Este de obicei o referință simbolică spre ramura curentă și va fi părintele următorului commit.

8
The three trees· concept · p. 257

Cele trei „arbori” (colecții de fișiere) gestionați de Git: HEAD — snapshot-ul ultimului commit și părintele următorului, indexul — următorul commit propus, și working directory — sandbox-ul.

9
Working tree· structură · p. 257

Un checkout al unei versiuni a proiectului: fișierele extrase din baza de date comprimată din directorul Git și puse pe disc ca să le folosești sau să le modifici. În „Reset Demystified” este numit sandbox.

10
Staging area· structură · p. 258

Un fișier, de obicei în directorul Git, care păstrează ce va intra în următorul commit; numele lui tehnic este „index”. În „Reset Demystified”: indexul este următorul commit propus.

nivel 2

Aprofundare (12)

1
Short SHA-1· concept · p. 224

Git recunoaște un commit după primele caractere ale hash-ului SHA-1, dacă sunt cel puțin patru și neambigue (niciun alt obiect nu începe la fel).

2
git show· comandă · p. 225

Afișează un obiect: pentru o etichetă anotată arată informațiile etichetei, apoi commit-ul etichetat, cu diff-ul lui.

3
Reflog· referință · p. 226

Jurnalul local, ținut de Git în fundal, al locurilor prin care au trecut HEAD și referințele ramurilor în ultimele luni; se vede cu git reflog și se folosește cu HEAD@{n}; util la recuperarea commit-urilor.

4
Ancestry references· concept · p. 228

Moduri de a indica un commit prin strămoși: ^ (caret) după o referință înseamnă părintele ei (HEAD^, iar ^2 al doilea părinte al unui merge), ~ (tilde) tot primul părinte, iar HEAD~2 înseamnă bunicul.

5
Parent commit· concept · p. 228

Commit-ul (sau commit-urile) care precedă direct un commit; fiecare commit păstrează pointeri spre părinți, ceea ce leagă istoricul și permite găsirea automată a bazei de fuziune.

6
git clean· comandă · p. 240

Șterge fișierele neurmărite din working directory (-f obligatoriu, -d și directoarele goale, -n de probă, -x și fișierele ignorate); periculos, fiindcă fișierele se pierd.

7
Rewriting history· proces · p. 249

Modificarea commit-urilor deja făcute: schimbarea ordinii, a mesajelor sau a fișierelor, comasarea ori divizarea lor sau eliminarea completă — doar înainte de a împărți munca cu alții.

8
Interactive rebase· proces · p. 250

git rebase -i reaplică o serie de commit-uri peste aceeași bază, oprindu-se unde vrei: poți schimba mesaje, reordona, comasa (squash), diviza sau elimina commit-uri.

9
Squashing· proces · p. 253

Comasarea mai multor commit-uri într-unul singur (de exemplu cu „squash” într-un rebase interactiv sau cu reset --soft).

10
Reset modes· opțiune · p. 267

Etapele lui git reset: 1) mută ramura spre care arată HEAD (se oprește aici cu --soft); 2) face indexul la fel ca HEAD (--mixed, implicit); 3) face working directory la fel ca indexul (--hard, singura variantă periculoasă).

11
git revert· comandă · p. 289

Creează un commit nou care anulează toate modificările unui commit existent („revert”); pentru un merge commit se indică părintele păstrat cu -m 1.

12
Submodule· structură · p. 304

Permite păstrarea unui depozit Git ca subdirector al altui depozit: poți clona alt depozit în proiectul tău și păstra commit-urile separate.

nivel 3

Detaliu (8)

1
Commit ranges· concept · p. 230

Selectarea unui interval de commit-uri: double dot (master..experiment) — accesibile dintr-o referință, dar nu din cealaltă; triple dot — accesibile din oricare dintre ele, dar nu din amândouă.

2
Interactive staging· proces · p. 232

git add -i (--interactive) deschide un mod interactiv în care pui în staging sau scoți fișiere ori doar porțiuni (patch-uri) din ele.

3
GPG signing· securitate · p. 242

Semnarea și verificarea muncii cu GPG (GNU Privacy Guard): etichete semnate (git tag -s), verificate (git tag -v) și commit-uri semnate (git commit -S).

4
filter-branch· comandă · p. 255

„Opțiunea nucleară”: rescrie automat un număr mare de commit-uri (de exemplu schimbarea adresei de e-mail sau eliminarea unui fișier din tot istoricul); doar pentru proiecte încă nepublicate.

5
Rerere· unealtă · p. 294

„Reuse recorded resolution”: Git ține minte cum ai rezolvat un conflict și aplică automat aceeași rezolvare data viitoare.

6
git blame· comandă · p. 301

Adnotează fiecare linie a unui fișier cu commit-ul și persoana care a modificat-o ultima dată (-L restrânge la un interval de linii).

7
git bisect· comandă · p. 302

Face o căutare binară prin istoricul commit-urilor pentru a găsi cât mai repede commit-ul care a introdus o problemă.

8
Credential storage· configurare · p. 336

Sistemul de credentiale al lui Git (credential.helper: cache în memorie, store pe disc, keychain-ul sistemului) care evită introducerea utilizatorului și a parolei la fiecare acces prin HTTP.