Adaugă fișiere (conținutul acestora) în index.
Opțiunea -n (--dry-run) simulează adăugarea, adică afișează informație de parcă ar adăuga fișiere, dar n-o face ca atare.
Index reprezintă ‘’fotografia’’ dosarului de lucru care va fi folosită drept conținut al următoarei comiteri. Din acest motiv după ce ați operat modificări asupra dosarului de lucru și înainte de a efectua comiterea trebuie să adăugați acest schimbări în index.
Sintaxa este:
git add [<opțiuni>] [<fișier>…]
În cazul în care lista fișierelor care trebuie adăugate în Index este voluminoasă comanda git-add ne pune la dispoziție opțiuni de filtrare:
Afișează autorii ultimilor modificări per rând.
Adnotează fiecare rând a fișierului cu informația din ultima comitere (autor, data etc) în care s-a modificat acest rând.
Putem limita raportul doar la un diapazon de rânduri cu opțiunea -L <început>,<sfârșit>.
Comandă pentru manipularea ramurilor. De obicei se utilizează pentru:
Afișarea ramurilor existente
git branch
în rezultat se va afișa o listă ce va conține ramurile existente, iar ramura curentă va fi marcată cu ajutorul simbolului *:
<ramura1>
<ramura2>
* <ramura3>
<ramura4>
<ramura5>
Crearea unei ramuri noi
git branch <ramura nouă>
în rezultat se va crea <ramura nouă> care va avea drept punct de început comiterea curentă. Totodată această comandă nu schimbă ramura curentă.
Ștergerea unei ramuri
se realizează folosind opțiunea -d (--delete)
git branch -d <ramură existentă>
Redenumirea unei ramuri
se realizează folosind opțiunea -d (--delete)
git branch -m [<ramura veche>] <ramura nouă>
În cazul când <ramura veche> este ramura curentă (altfel spus se dorește redenumirea ramurii curente) aceasta poate fi omisă. Anume din acest motiv în comanda de mai sus parametrul <ramura veche> este opțional.
Afișează conținutul, tipul sau mărimea obiectelor git.
Cum arată un arbore
De exemplu dosarul acestui proiect la un moment oarecare avea asociat arborele cu hash-ul c5e8251aaa20f5a822b3dc12d03d68c78e8ccd30, folosind comanda
git cat-file -p c5e8251aaa20f5a822b3dc12d03d68c78e8ccd30
se va afișa:
100644 blob d8539217c2eb6b51a86abe1279c37c8cc4139d22 .gitignore
100644 blob d45a907923f682f533128fb344c8eefde1fb81fd Makefile
100644 blob a1c4e80ac1142e3e4a35039478b9ff3b0afc94eb README.md
040000 tree 4a3d4ac761ee7eeb491e5cd33a91bf147bb25552 locale
100644 blob de2346e1cc0afae33b569cf12f2e9510dd422814 make.bat
040000 tree 5be6adfbe1e7b690cf5abe4d61aa211cf1f411bd source
Cum arată o comitere
De exemplu folosind comanda pe ultima comitere:
git cat-file -p HEAD
se va afișa:
tree c5e8251aaa20f5a822b3dc12d03d68c78e8ccd30
parent 9a7657e68c8c93f8944223175d855a8e2b8ccf2e
author Radu Dumbraveanu <rdumbraveanu@amsoft-group.com> 1447341585 +0200
committer Radu Dumbraveanu <rdumbraveanu@amsoft-group.com> 1447341585 +0200
Cum arată o etichetă adnotată
De exemplu folosind comanda pentru o anumită etichetă cu hash-ul b5b809ec5a83c0ebe15c41f4dacf61de9e12dd61 care se referă la comiterea 9afeed48d9654122a4c4f0f8e0ef0cd388550d7f:
git cat-file -p b5b809ec5a83c0ebe15c41f4dacf61de9e12dd61
se va afișa:
object 9afeed48d9654122a4c4f0f8e0ef0cd388550d7f
type commit
tag v999
tagger Radu Dumbraveanu <rdumbraveanu@amsoft-group.com> 1447411375 +0200
Un exemplu de etichetă
Comută poziția curentă a referinței HEAD.
Poate fi aplicată asupra fișierelor sau a întregului proiect.
Dacă este aplicată fișierelor:
git checkout <comitere> <fișier>...
atunci actualizează conținutul fișierelor cu cel din <comitere>.
Dacă nu este aplicată asupra fișierelor:
git checkout <comitere>
atunci schimbă (atualizează) întreg dosarul de lucru. Dacă <comiterea> reprezintă o ramură atunci are loc comutarea la acea ramură.
Aplică doar modificările care rezidă într-o anumită comitere.
Pentru a copia comiterile se folosește sintaxa:
git cherry-pick <comitere>
după ce s-au soluționat conflictele de integrare trebuie de rulat:
git cherry-pick --continue
sau dacă se dorește anularea întregului proces:
git cherry-pick --abort
Șterge fișierele neindexate (care nu-s supuse controlului versiunii).
Șterge recursiv fișierele care nu-s supuse controlului versiunii.
Pentru că reprezintă o operație într-un fel periculoasă are opțiunea de simulare -n (--dry-run).
Copiază un proiect Git într-o altă locație (local sau la distanță).
Sintaxa este:
git clone [<opțiuni>] <URL proiect Git> <dosar destinație>
În cazul când copierea se face local, adică locația nouă se află pe același calculator ca și proiectul sursă, se poate salva din spațiul folosit (pe disc) utilizând opțiunea -l (--local):
git clone -l <URL proiect Git> <dosar destinație>
efectul utilizării acestei opțiuni este acela că dosarul .git/objects din <dosarul destinație> nu va conține obiectele Git ca atare ci doar legături tari către fișierele din proiectul sursă. Dacă nu folosim această opțiune atunci se creează copii ale fișierelor și nu legături, dar dacă dorim să ne asigurăm și să forțăm acest comportament în mod obligatoriu putem folosi opțiunea --no-hardlinks.
După clonare proiectul sursă devine upstream pentru <proiectul destinație> și respectiv referința origin a acestuia este modificată astfel încât să indice către proiectul sursă. Pentru a modifica puțin acest comportament putem folosi opțiunea -o (--origin) pentru a schimba numele referinței care va indica către proiectul sursă. De exemplu în rezultatul rulării comenzii:
git clone -o source <URL proiect Git> <dosar destinație>
în proiectul destinație va fi creată referința source în dosarul .git/refs/remotes care va indica către proiectul sursă. Deopotrivă cu această opțiune există și alte opțiuni pentru modificare anumitor lucruri din proiectul destinație cum ar fi:
Înregistrează modificările în istoria proiectului.
Stochează conținutul indexului în istorie împreună cu un mesaj, autorul comiterii și data.
Cu -a (--all) automat actualizează index-ul pentru fișierele modificate sau șterse (dar nu și pentru cele noi).
Ne poate ușura puțin lucrul dacă vrem să folosim mesajul dintr-o altă comitere cu
Mesajul -m <mesaj> (--message=<mesaj>).
Modificarea ultimei comiteri
Cu ajutorul opțiunii --amend avem posibilitatea să redactăm ultima comitere: începând cu mesajul, autorul și terminând cu conținutul acesteia. De notat însă că atunci când redactați ultima comitere se schimbă automat și hash-ul acesteia. Respectiv pot apărea situații neclare atunci când proiectul dvs. nu este doar local. De exemplu, să presupunem că proiectul local și cel de la distanță arată astfel
(A) -- (B) -- (C)
|
<master>
|
HEAD
după ce ați aplicat opțiunea --amend proiectul dvs local va arăta astfel
(A) -- (B) -- (C')
|
<master>
|
HEAD
unde (C') este comiterea (C) redactată respectiv cu alt hash. În așa fel dacă ar fi să comparăm proiectul local cu cel de la distanță situația e următoarea
(C) - <origin/master>
/
(A) -- (B)
\
(C')
|
<master>
|
HEAD
astfel dacă veți încerca să încărcați modificările să nu vă surprindă mesajul:
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '<proiectul dvs.>'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Schimbă parametrii Git pentru proiectul curent (--local), pentru toate proiectele utilizatorului curent (--global) și pentru pentru toate proiectele din sistem (--system).
Afișează diferențele dintre conținutul ultimei comiteri, index și dosarul de lucru.
Descarcă obiecte git și referințe din alt proiect git.
Creează un proiect Git nou sau reinițializează unul existent.
Pentru a inițializa proiectul Git în dosarul curent se rulează comanda:
git init
iar pentru a inițializa proiectul în alt dosar decât cel curent este nevoie de a indica calea spre acest dosar:
git init <dosarul proiectului>
Inițializarea proiectului Git din punct de vedere tehnic constă în crearea în dosarul destinație a unui dosar ascuns numit .git împreună cu subdosarele objects (unde se vor păstra obiectele git), refs/heads (pentru stocarea referințelor), refs/tags (pentru stocarea etichetelor) și fișierul HEAD (pentru stocarea referinței HEAD).
Afișează istoria.
Afișează informații despre fișierele din index și dosarul de lucru.
De exemplu,
-u (--unmerged) fișierele care n-au fost integrate (cu conflicte).
Integrează două sau mai multe ramuri.
Cum sunt prezentate conflictele; sun marcate prin <<<<<<<, =======, și >>>>>>>. Fragmentul până la ======= este cel din ramura sursă, și partea după - din ramura destinație.
Rulează instrumente pentru soluționarea conflictelor de integrare.
Descarcă toate modificările operate asupra proiectului la distanță și le integrează în proiectul local. Altfel spus realizează sincronizarea proiectul local cu un proiect la distanță. Cel mai des se utilizează în formatul următor:
git push <proiect la distanță> <ramura la distanță>
Unde <proiect la distanță> poate fi specificat direct prin URL (https://git-scm.com/book/tr/v2/Git-on-the-Server-The-Protocols) sau printr-un nume creat cu ajutorul comenzii git-remote. În rezultat modificările din ramura din <proiect la distanță> sunt descărcate în ramura cu același nume din proiectul local. Dacă ramura locală are alt nume atunci va fi nevoie de schimbat puțin formatul comenzii:
git push <proiect la distanță> <ramura la distanță>:<ramura locală>
Încarcă toate modificările operate asupra proiectului local într-un alt proiect aflat de regulă la distanță. Altfel spus realizează sincronizarea unui proiect la distanță cu proiectul local. Cel mai des se utilizează în formatul următor
git push <proiect la distanță> <ramura locală>
Unde <proiect la distanță> poate fi specificat direct prin URL (https://git-scm.com/book/tr/v2/Git-on-the-Server-The-Protocols) sau printr-un nume creat cu ajutorul comenzii git-remote. În rezultat modificările din ramura locală sunt încărcate în ramura cu același nume din proiectul <proiect la distanță>. Dacă ramura de la distanță are alt nume atunci va fi nevoie de schimbat puțin formatul comenzii
git push <proiect la distanță> <ramura locală>:<ramura la distanță>
În cazul când nu este specificată ramura sursă (ramura locală>)
git push <proiect la distanță> :<ramura la distanță>
efectul rulării comenzii este ștergerea ramurii <ramura la distanță>.
Încărcare forțată
Modificările locale pot fi respinse de <proiect la distanță> atunci când acesta conține modificări mai proaspete decât cele locale. În așa caz fie că se integrează noile modificări și apoi se execută încă o dată git-push fie, dacă țineți cu tot adinsul, se suprascriu folosind opțiunea -f (--force)
git push -f <proiect la distanță> <ramura locală>
Warning
În rezultatul încărcării forțate toate modificările mai proaspete decât cele locale vor dispărea din proiectul de la distanță. Din acest motiv asigurați-vă că nu sunt modificări importante pe proiectul la distanță. Printre situațiile când este nevoie de încărcare forțată se numără: Cum să schimb mesajul ultimei comiteri? sau Cum să redenumesc o ramură?.
Schimbă punctele de început ale ramurilor.
Schimbă index-ul pentru anumite fișiere sau în general schimbă ‘’poziția’’ referinței HEAD.
Sintaxa
git reset [-q] [<arbore git>] [--] <fișier>…
git reset (--patch | -p) [<arbore git>] [--] [<fișier>…]
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<comitere>]
În prima și în a doua formă înlocuiește conținutul (versiunea) <fișier>… din index cu versiunea <fișier>… din <arbore git>. În a treia formă schimbă comiterea curentă, adică ‘’poziția’’ referinței HEAD.
Opțiunile: --soft, --mixed și --hard sunt într-o anumită relație și anume:
Warning
În caz că nu vă place ce a ieșit după schimbarea referinței HEAD puteți întotdeauna reveni la poziția inițială folosind referința ORIG_HEAD
Un articol în engleză în care se folosesc imagini vizuale pentru descrierea acestei comenzi: Reset Demystified
Comandă pentru manipularea numelor asociate proiectelor la distanță conexe proiectului curent.
Adăugarea, redenumirea și ștergerea se fac cu ajutorul opțiunilor add, rename și rm (remove) în felul următor:
git remote add <nume> <URL-ul proiectului>
git remote rename <vechi> <nou>
și respectiv ștergerea:
git remote remove <nume existent>
în rezultat se șterge nu doar numele ci și toate ramurile la distanță din acest proiect stocate local prin git-fetch sau git-pull.
Pentru a lista alias-urile existente:
git remote -v
De exemplu în cazul acestui proiect în rezultatul rulării comenzii de mai sus avem:
git remote -v
origin https://github.com/Streeling/git-rif.git (fetch)
origin https://github.com/Streeling/git-rif.git (push)
sau simplu:
git remote
fară multe detalii
Dacă ați greșit se poate schimba url-ul:
git remote set-url <nume> <URL nou>
Pentru a curăța de ramurile care nu există pe proiectul la distanță prune și ca orice comandă ‘’periculoasă’’ are opțiunea de simulare --dry-run.
Afișează informația despre referințele proiectului.
Sintaxa:
git show-ref [<opțiuni>] [--] [<șablon de căutare>…]
Dacă nu este specificat șablonul de căutare sunt afișate toate referințele. Când acesta (șablonul) este specificat atunci se afișează toate referințele a căror cale absolută conține drept prefix șablonul indicat. Dacă se dorește afișarea informației despre o referință care are exact numele căutat se folosește opțiunea --verify, de exemplu:
git show-ref --verify refs/heads/master
Afișează diferențele dintre conținutul ultimei comiteri, index și dosarul de lucru.
Sintaxa:
git status [<opțiuni>] [--] [<fișier>…]
Atunci când nu este specificat nici un fișier este aplicată pentru toate fișierele din proiect.
Practic afișează 3 zone informaționale:
Comandă pentru manipularea etichetelor.
Pentru a crea o etichetă simplă se folosește în formatul următor:
git tag <nume etichetă> [<comitere>|<obiect git>]
Pentru a crea o etichetă adnotată se folosește opțiunea -a (--annotate):
git tag -a [-m <notă>] <nume etichetă> [<comitere>|<obiect git>]
dacă nu este folosită opținea -m (--message) atunci se va deschitde editorul implicit (ca și în situația cu git-commit).
Pentru a altera referința unei etichete existente poate fi utilizată opțiunea -f (--force) doar că în cazul când eticheta a fost încărcată pe server nu se recomandă această procedură. Etichetele sunt descărcate o singură dată de pe server, adică va fi nevoie de anunțat toate persoanele care au descărcat eticheta modificată să o șteargă și s-o descarce încă o dată.
Ștergerea unei etichete se realizează cu ajutorul opțiunii -d (--delete):
git tag -d <etichetă existentă>…