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

🧱 2. Git Basics

Lucrul de zi cu zi: depozite, staging, commit-uri, istoric, anulări, depozite la distanță și etichete.

nivel 1

Bază (29)

1
git init· comandă · p. 32

Creează în directorul curent subdirectorul .git, cu scheletul depozitului; nimic nu este încă urmărit. Creează și ramura implicită master.

2
Repository· structură · p. 32

Depozitul Git: proiectul pus sub controlul versiunilor, împreună cu tot istoricul lui. Se obține fie transformând un director local într-un depozit (git init), fie clonând un depozit existent (git clone).

3
git clone· comandă · p. 33

Obține o copie completă a unui depozit existent — aproape toate datele serverului, fiecare versiune a fiecărui fișier din istoric: creează directorul, inițializează .git, aduce datele și extrage o copie de lucru a ultimei versiuni; adaugă automat depozitul sursă ca origin.

4
git status· comandă · p. 34

Principala unealtă care arată starea fișierelor: modificate, puse în staging, neurmărite, plus ramura curentă; git status -s (--short) dă un format compact pe două coloane (staging area / working tree).

5
Modified· stare · p. 34

Starea unui fișier pe care l-ai schimbat, dar pe care încă nu l-ai înregistrat (commit) în baza de date.

6
Tracked file· stare · p. 34

Fișier care era în ultimul snapshot sau a fost nou pus în staging; poate fi unmodified, modified sau staged. Pe scurt, fișierele urmărite sunt cele pe care Git le cunoaște.

7
Untracked file· stare · p. 34

Orice alt fișier din working directory: nu era în ultimul snapshot și nu este în staging area. Git nu îl include în commit-uri până nu îi ceri explicit (git add).

8
Committed· stare · p. 35

Starea în care datele sunt stocate în siguranță în baza de date locală, adică în directorul Git.

9
git add· comandă · p. 35

Comandă multifuncțională: începe urmărirea fișierelor noi, pune în staging fișierele modificate și marchează conflictele de fuziune ca rezolvate — „adaugă exact acest conținut în următorul commit”. Git pune în staging fișierul exact așa cum este în momentul rulării.

10
master· referință · p. 35

Numele implicit al ramurii create de git init; nu este o ramură specială, ci doar cea creată implicit, pe care puțini o redenumesc (multe gazde folosesc acum main).

11
Staged· stare · p. 36

Starea unui fișier modificat pe care l-ai marcat, în versiunea lui curentă, ca să intre în următorul snapshot (commit).

12
.gitignore· fișier · p. 38

Fișier care listează tipare de fișiere pe care Git nu trebuie să le adauge și nici să le arate ca neurmărite (jurnale, fișiere generate la build). Liniile goale și cele cu # se ignoră, tiparele glob se aplică recursiv, / la început evită recursivitatea, / la final indică un director, ! neagă un tipar.

13
git diff· comandă · p. 39

Arată exact liniile adăugate și șterse (patch-ul). Fără argumente compară working directory cu staging area (modificările încă nepuse în staging); git diff --staged (sinonim --cached) compară staging area cu ultimul commit.

14
Commit message· concept · p. 42

Textul care descrie un commit, scris în editor sau dat cu -m. Ghidul proiectului Git: un prim rând de cel mult ~50 de caractere care rezumă modificarea, un rând liber, apoi o explicație mai detaliată.

15
git commit· comandă · p. 42

Creează un commit din ce se află în staging area: lansează editorul pentru mesaj sau primește mesajul cu -m; -v include diff-ul în editor, iar -a pune automat în staging fișierele deja urmărite (sare peste staging area).

16
git rm· comandă · p. 44

Scoate un fișier din fișierele urmărite (din staging area) și îl șterge din working directory; -f forțează ștergerea unui fișier modificat sau pus în staging, iar --cached îl păstrează pe disc, dar oprește urmărirea.

17
git log· comandă · p. 46

Afișează istoricul commit-urilor în ordine cronologică inversă (SHA-1, autor, dată, mesaj). Opțiuni utile: -p/--patch, --stat, --pretty (oneline, format), --graph, --oneline; limitare cu -<n>, --since/--until, --author, --grep, -S și o cale.

18
Amending a commit· proces · p. 52

git commit --amend refă ultimul commit cu staging area curentă (eventual doar cu alt mesaj): nu îl repară, ci îl înlocuiește complet cu un commit nou. Se face doar pe commit-uri locale, care nu au fost trimise (push) undeva.

19
Undoing things· proces · p. 52

Uneltele de bază pentru anularea modificărilor: refacerea ultimului commit (--amend), scoaterea unui fișier din staging și renunțarea la modificările unui fișier; unele anulări nu pot fi anulate, deci se poate pierde muncă.

20
git reset· comandă · p. 53

Manipulează cei trei arbori: mută ramura spre care arată HEAD și, opțional, actualizează indexul și working directory; git reset HEAD <file> scoate un fișier din staging.

21
git restore· comandă · p. 55

Comandă introdusă în Git 2.23.0, alternativă la git reset pentru multe anulări: git restore --staged <file> scoate un fișier din staging, iar git restore <file> renunță la modificările locale.

22
Remote repository· structură · p. 56

Versiune a proiectului găzduită pe Internet sau în rețea (sau chiar pe aceeași mașină), read-only sau read/write; colaborarea înseamnă să trimiți (push) și să aduci (pull) date către și din aceste depozite.

23
git remote· comandă · p. 57

Gestionează depozitele la distanță: fără argumente listează numele scurte (shortnames), -v arată URL-urile; git remote add <shortname> <url>, git remote show <remote>, git remote rename, git remote remove.

24
origin· referință · p. 57

Numele implicit pe care Git îl dă serverului de la care ai clonat; ca și master, nu are nimic special (cu git clone -o se poate alege alt nume).

25
git fetch· comandă · p. 58

Aduce din depozitul la distanță toate datele pe care nu le ai încă și actualizează ramurile de urmărire la distanță (de exemplu origin/master); nu face merge și nu modifică ce lucrezi.

26
git pull· comandă · p. 59

Aduce datele (fetch) și apoi încearcă să integreze (merge) în ramura curentă ramura la distanță urmărită — în esență git fetch urmat de git merge; cu pull.rebase sau --rebase face rebase în loc de merge.

27
git push· comandă · p. 59

Trimite commit-urile unei ramuri spre un depozit la distanță: git push <remote> <branch>. Funcționează doar cu drept de scriere și dacă nimeni nu a trimis între timp; altfel trebuie întâi să aduci și să integrezi munca celorlalți.

28
git tag· comandă · p. 61

Listează etichetele (alfabetic; -l pentru un tipar), creează etichete (-a anotată, -m mesaj; fără opțiuni una lightweight) și le șterge local (-d).

29
Tag· referință · p. 61

Etichetă care marchează un punct important din istoric, de obicei o versiune lansată (v1.0, v2.0). Git are etichete lightweight și annotated; git push nu le trimite implicit (git push origin <tagname> sau --tags).

nivel 2

Aprofundare (14)

1
Clean working directory· stare · p. 34

Situația în care niciun fișier urmărit nu este modificat și nu există fișiere neurmărite; e bine să ai o stare curată când schimbi ramura.

2
Unmodified· stare · p. 34

Starea unui fișier urmărit care nu s-a schimbat de la ultimul commit — de exemplu toate fișierele imediat după clonare.

3
Glob pattern· concept · p. 38

Expresii regulate simplificate folosite de shell: se potrivește cu oricâte caractere, ? cu un singur caracter, [abc] cu un caracter din paranteze, [0-9] cu un interval, iar cu directoare imbricate.

4
Skipping the staging area· proces · p. 43

Scurtătura git commit -a: Git pune automat în staging toate fișierele deja urmărite înainte de commit, fără git add; comod, dar poate include modificări nedorite.

5
git mv· comandă · p. 45

Redenumește un fișier. Git nu stochează metadate despre mutări, ci deduce redenumirea; git mv este echivalent cu mv, git rm și git add — o comandă de comoditate.

6
Author· rol · p. 49

Persoana care a scris inițial o lucrare; când un membru al proiectului aplică un patch trimis de tine, tu rămâi autor, iar el devine committer.

7
Committer· rol · p. 49

Persoana care a aplicat ultima dată lucrarea (de exemplu membrul care a aplicat patch-ul trimis de autor).

8
Force push· proces · p. 53

git push --force suprascrie istoria de pe server (de exemplu după un rebase sau amend); colaboratorii care și-au bazat munca pe commit-urile vechi ajung cu istorii dublate și confuze.

9
Unstaging· proces · p. 53

Scoaterea unui fișier din staging area fără a-i pierde modificările din working directory: git reset HEAD <file> sau, din Git 2.23, git restore --staged <file>.

10
Unmodifying a file· proces · p. 54

Renunțarea la modificările locale ale unui fișier, readus la ultima versiune din staging sau din commit: git checkout -- <file> sau git restore <file>. Comandă periculoasă: modificările necomise se pierd definitiv.

11
Annotated tag· obiect · p. 62

Etichetă stocată ca obiect complet în baza de date Git: are checksum, numele, e-mailul și data celui care a etichetat, un mesaj și poate fi semnată și verificată cu GPG; este varianta recomandată.

12
Lightweight tag· referință · p. 62

Etichetă care seamănă cu o ramură ce nu se schimbă: doar un pointer la un commit — checksum-ul commit-ului salvat într-un fișier, fără alte informații.

13
Detached HEAD· stare · p. 66

Starea în care HEAD indică direct un commit, nu o ramură (de exemplu după git checkout pe o etichetă); un commit nou făcut acum nu aparține niciunei ramuri și rămâne accesibil doar prin hash-ul exact.

14
Git alias· configurare · p. 66

Scurtătură definită cu git config (de exemplu alias.ci commit), astfel încât git ci înlocuiește git commit; un alias care începe cu ! rulează o comandă externă.

nivel 3

Detaliu (2)