- $git add
- $git reset
- $git rm
- $git mv
- $git status
- $git diff
- $git commit
- $git commit -a -m
- $git commit --amend --no-edit
Osnovni princip rada
Osnovni princip rada Git sistema prikazan je na slici dolje. Svaki snapshout working direktorija sprema se u repository. Međufaza između working direktorija i repositorija je staging area. Staging area služi kao privremeno mjesto na koje dodajemo fajlove sa $git add fileName kako bi se moglo izvršiti upoređivanje. Oni fajlovi koji nisu dodani sa $git add nazivaju se untracked te ih Git ne prati da li je u njima izvršena nekakva izmjena. Svi fajlovi koji su prebačeni u Staging Area nazivaju se tracked fajlovi.
Dakle sa $git add dodajemo fajlove u Staging Area kako bi se pratile izmjene unutar njih,
a sa $git rm --cached i $git reset se izbacuju iz Staging Area.
Provjera statusa
U kakvom stanju je Staging Area provjeravamo sa $git status. Daje informacije o branchu, o commitu, o novim fajlovima koji su dodani u staging area i koji će biti dodani u commit. Također upoređuje fajlove u working direktoriju sa onima u staging area te ako postoji razlika onda ispisuje i tu informaciju.
Također postoji i $git diff koji pokazuje koje su konkretno razlike između fajla u working direktoriju i staging area. Ukoliko se dva fajla razlikuju onda moramo taj fajl dodati u staging area sa $git add.
Dodavanje fajlova u Staging Area
Fajlovi se u Staging Area dodaju sa $git add fileName .Postoje razne kombinacije ove naredbe:
$git add --all - dodaje sve fajlove projekta
$git add dir1/*.php - dodaje sve .php fajlove u dir1 direktoriju
$git add dir1 - dodaje sve fajlove u dir1 direktoriju i njegovim poddirektorijima
VAŽNO: Ukoliko sa $git diff primjetimo da je fajl u working direktoriju izmjenjen moramo ga ponovo sa $git add dosati u Staging Area. Ako to ne učinimo onda se prilikom $git commit izmjena neće vidjeti u Repositoriju.
Ignoriranje fajlova
Fajlovi koji se ne bi trebali naći u Staging Area pa tako niti u repositoriju mogu se navesti u .gitignore fajlu. To su obično nekakvi temporary ili log fajlovi koji nisu bitni za source code. Ovaj fajl može se staviti u bilo koji direktorij Working Direktorija, a može biti i više .gitignore fajlova. No najbolje je staviti jedan .gitignore fajl u root projekta. Važno je uočiti da se .gitignore ne stavlja unutar .git direktorija.
.gitignore
# a comment - this is ignored # no .a files *.a # but do track lib.a, even though you're ignoring .a files above !lib.a # only ignore the root TODO file, not subdir/TODO /TODO # ignore all files in the build/ directory build/ # ignore doc/notes.txt, but not doc/server/arch.txt doc/*.txt # ignore all .txt files in the doc/ directory doc/**/*.txt
Pregled izmjena
Kako bi vidjeli razliku između fajla u working direktoriju i onog u staging area potrbno je izvršiti komandu$git diff - daje sve razlike
$git diff --staged - prikazuje što će ući u commit tj. repository
Uklanjanje fajlova iz working dir. i staging area
$git rm fileName - uklanja fajl iz working direktorija i iz staging areaUkoliko uklonimo fajl u working direktoriju (npr. u Windows Exploreru) onda će $git status pokazati.
Nakon toga potrebno je izvršiti $git add --update kako bi se izvršio update Staging Area.
Uklanjanje fajlova samo iz staging area
Ukoliko ne želimo da neki fajlovi budu tracked, a ipak da ostanu u working direktoriju koristit ćemo:$git rm --cached fileName ili
$git reset fileName (stariji oblik naredbe)
$git rm --cached -r . uklanja sve fajlove iz Staging Area.
još se može koristiti $git reset *
Premještanje fajlova
Premještanje i preimenovanje fajlova se obavlja sa:$git mv FileName
Commit
Pomoću naredbe $git commit sve ono što je u Staging Area prebacuje se u Repository. Ako upotrijebimo -m flag možemo odmah dodati message, npr:$git commit -m 'Izmjena napravljena'
Ako upotrijebimo samo $git commit onda se otvara Vim Editor u kojem je potrebno unijeti poruku. Iz Vim Editora se izlazi sa ESC pa :wq (write and quit tj. save and quit)
Preskakanje Staging Area
Ako želimo da se fajl direktno prebaci iz Working Direktorija u Repository, tj. da se preskoči Staging Area upotrijebit će se$git commit -a -m 'Moj Komit'
Commit sa popravkom (amend)
Ukoliko smo primjetili da u commitu nije sve napravljeno kako treba t.j. da npr. u određenom fajlu je greška koju treba popraviti, a da taj popravak ne treba ići u novi commit to možemo uraditi sa "--amend". Naime sa ovom opcijom se neće napraviti novi commit nego će izmjene biti stopljene u prethodni commit.$ git commit --amend --no-edit --no-edit znači da će se uzeti message od prethodnog commita
Schema rada sa fajlovima