Šta trebate znati o Git, i Git komandama koji će te svakodnevno koristiti
Kao što večina zna git je veliki dio programiranja i koristi se svugdje i u svakom projetku. Tako da učenje komandi i kako ih koristiti je veoma bitno i korisno. Svaki projekat na kojem budete radili će imati neku vrstu gita: "Github", "GitLab", "BitBucket" ili bilo koji drugi. U ovom postu ćemo proći kroz komande koje se koriste svakodnevno i šta je to git.
NOTE: Ako koristite neku vrstu GUI za git kao SourceTree, Github Desktop ili neki VSCode extenziju, pokušajte koristiti git konzolu za komande jer će to pomoći da se bolje razumije šta se dešava iza klikova na dugmad, a bit će i korisno ako negdje zapnete sa git i treba da shvatite šte se desilo.
Šta je Git?
Git je vrsta version control system koji nam omogućava praćenje promjena u dokumentima. Na primjer, ako promijeniš neki fajl, git može da pokaže tačno koji fajl je promijenjen, ko je mijenjao fajl, i zašto je promijenjen. Git prati sve promjene na projektu tako da se može pogledati ko je mijenjao, kada i zašto, čak i promjene koje je uradio neko drugi na projektu.
Ovo može biti od velike koristi na projektu, ako se napravi greška u codu može se vratiti unazad i provjeriti sve promjene i vidjeti kada se i gdje desila greška. Samo zamislite svijet 🌍 bez gita, i napravili ste grešku u projektu koji ima mnogo fajlova i mnogo ljudi koji rade na njemu. Bilo bi veome teško da se pronađe greška, isto na šta još taj bug ima utjecaj. Zato alat kao što je git nam olakšava život i uzrokuje manje stresa 😄.
Kada inicijalizirmo git u našem projektu kreira se local working directory, što znaći da sve promjene se spašavaju na lokalnu mašinu i vi ste jedini koji možete pristupiti tom projektu. I u slučaju da se desi nešto toj mašini gdje se projekat nalazi i ne može se restore onda će se izgubiti sve sa njega uključujući i git projekat. Zato su Github i Gitlab alati koji nam pomažu da svoje projekte i fajlove spasimo bez obzira šta se desi sa našom mašinom. Šta ustvari ti alati rade jeste da kipiraju fajlove na internet i onda im možemo pristupati sa bilo koje mašine i kad god nam trebaju. Isto daju nam opciju da izabremo da li će projekat biti javni ili privatni, u slučaju da radimo sa više osoba na projetku ili ako radimo na nekom tajnom projektu i stavimo private 🔏 da niko ne može pristupiti osim nas. To se naziva remote working directory i imamo komande koje nam olkašavaju da pošaljemo svoje lokalne promjene na remote.
Komande u Git 💻
git add && git commit
Jedna od najčešće korištenih naredbi svakodnevno je git add i git commit , koristimo ih za dodavanje promijenjenih fajlova u staged changes, što znači da ako imamo više datoteka promijenjenih u projetku, ali želimo samo neke fajlove u local repository, onda koristimo git add i dodamo ih u staged changes i pripremimo ih za slijedeci korak koji je commiting.
1git add file.js
Koristeći ovu komandu možemo dodati jedan ili više fajlova i onda možemo ići na slijedeći korak koji je commitanje tih fajlova na local repository. Ako želite da dodate sve fajlove odjednom, umjesto da dodajete jedan po jedan sa git add možete koristiti git add . i dodati sve promijenjene fajlove odjednom.
1git add .
Nakon sto dodamo fajlove, možemo ići na idući korak commit i commitati ih sa ovom komandom:
1git commit -m "Commit message"
Onda commitamo fajlove na repository sa nekom kratkom porukom koja opisuje promjene u fajlovima i onda možemo nastaviti raditi bez straha da ćemo izgubiti promjene. Ako želimo da dodamo promjene fajlova u staged changes i da ih komitamo bez provjere koji fajlovi su promjenjeni, onda možemo kombinovati dvije komande i dodati i commit fajlove sa ovom komandom:
1git commit -am "Commit message"
NOTE: Bolja opcija bi bila da se prvo dodaju fajlovi u staged chages i onda da se provjere fajlovi da nebi slučajno commit nešto što smo možda testirali ili provjeravali. Nakon što provjerimo fajlove onda ih možemo commit na repository.
git status && git log
Iduce komande koje se četo koriste su git status i git log, ove dvije komande se koriste za provjere status fajlova. git status nam prikazuje koji fajlovi su promjenjeni i koji od njih su dodani u staged changes. A git log nam prikazuje našu commit historiju sa njenim detaljima kao što su poruka, datum, ime osobe koja je napravila commit ...Ove dvije komande su korisne jer nam daju uvid u to šta je promijenjeno, šta je u staged changes i da provjerimo šta je i kada commit i šta se dešava na trenutnom branchu.
1git status
Probajte ovu ovu komandu u git konzoli i pratite šta se desi, ako imate promijenjenih fajlova pokazat će vam se u konzoli, i možda se igrajte sa git add komandom, dodajte fajlove u stage changes i vidite kako to izgleda.
1git log
Kada se izvrši ova komanda iznad git log, vidjet će te listu svih komita na lokalnom branchu, svi komiti će imate commit id i commit author, također bi trebala i biti commit message koju je dodao autor kada je commitao promjenu. A ako ne želite da vidite sve te informacije možete koristiti komandu koja će vam vratiti samo osnvne informacije, i bit će preglednija lista:
1git log --oneline
Ima više varijanti za git log a i za ostale kommande, najbolje mjesto da ih vidite i informišete je officijelna Git dokumentacija Git i ProGit knjiga koja je besplatna, i ide mnogo dublje o git nego što je u ovom postu. Definitivno provjerite, vidite koje sve opcije, možda nađete nešto korisno.
git branch && git checkout
Ove komande se također često koriste, ali ne toliko ako ove iznad što smo prošli. Koristimo ih kada želimo dodati nove stvari u aplikaciju ili ako želimo nešto testirati a nećemo da diramo ostatak aplikacije da nebi nešto pokvarili. Takve stvari se rade na posebnom branchu, koji ima iste fajlove kao i ostatak aplikacije, ali promjene nad njima ne utiču na ostale brancheve. Ovako možemo raditi šta god želimo bez straha da čemo pokvariti aplikaciju. Zbog toga imamo i main branch koji sadrži testiran code, a kreiramo druge branchve za testiranje i dodavanje novih featura u aplikaciju. Da bi kreirali novi branch i dali mu ime koristimo kommandu git branch branch-name, i kada to izvršimo možemo provjeriti da li je kreiran branch sa komandom git branch.
1git branch test-branch
1git branch
Kada provjerimo da je branch kreiran, koristimo komandu git checkout branch-name da se prebacimo na taj branch, i kada se prebacimo na novi branch, sve promjene koje budemo pravili bit će na tom branch i neće imati efekta na druge brancheve.
1git checkout test-branch
Kao i sa drugim komandama i ovdje mozemo koristiti skraćenu verziju sa kojom možemo spojiti git branch branch-name i git checkout branch-name koja će kreirati branch i odmah se prebaciti na njega, ta komanda izgleda ovako:
1git checkout -b test-branch
Ova komanda će kreairati novi branch test-branch i prebaciti se na njega, tako da se ne mora ručno prebacivati. Ove skraćene verzije mogu uštediti vremena, a i spasiti kada ste u žurbi da komitate promijenjene fajlove na trenutni branch jer ste zaboravili uraditi checkout nakon što se kreirali novi branch (što se meni desilo 😌).
git merge && git stash
Ove komande se ne koriste toliko često, ali su korisne. Npr. ako imamo neke promjene na našem repository, i možda se desi da imamo grešku na nekom drugom branchu koji trebamo odmah pogledati, ali smo u pola posla na trenutnom branchu i ne želimo da komitamo da bi lakše vidjeli promjene. Ne možemo samo preći na drugi branch sa checkout jer možda imaju iste fajlove promijenjene i onda dodje do konflikta da se utvrdi koje promjene su ispravne. U tom slučaju možemo koristiti komandu git stah koja spasi trenutne promjene na neko mjesto u memorji, i oslobodi nam trenutni branch, ukloni sve promjene. Uradimo stash pređemo na drugi branch, fixamo bug, i vratimo se na trenutni branch i uradimo apply fajlova koje smo stash i nastavimo gdje smo stali. Da bi uradili stash promijenjenih fajlova koristimo komadnu:
1git stash
Sa ovom komandom kreiramo stash fajlove koje možemo kasnije vratiti kada nam zatrebaju, ili u slućaju da odlučimo da odbacimo te promjene, možemo ih samo obrisati. Ako koristimo ovu komadnu svaki stash će se dodavati u stash listu označenu za brojem. Kada želimo da provjerimo koje sve stash imamo, možemo koristiti ovu komandu da ih vidimo:
1git stash list
I ako želimo da apply neku od stash vrijednosti, moramo koristiti index od stash kojeg želimo, index možemo naći kada ukucamo komandu iznad git stash lsit i možemo ih apply promjene ovako:
1git stash apply stash@{3}
Sada ćemo apply sve promjene u naš branch koje su bile stashed, ovo je korisno kada prelazimo između različitih brancheva. Iduča komanda je git merge, a nju koristimo kada želimo da spojimo brancheve, i dodamo promjene sa jednog na drugi. Inače se ovo koristi da se spoje branchevi na kojima se radi sa main branch ili ako je bila neka promjena na main branch merge je sa trenutnom na kojoj radimo da bi imali nove promjene kod sebe. Nakon sto završimo na njima i tesitramo ih da rade kako treba. Brancheve spojimo tako sto odemo na branch na koji želimo dodati fajlove sa drugog brancha i ukucamo komandu za merge, možda zvući komplivano ali je ustvari lagano 😎
1git merge test-branch
Znaći ako smo na main branch i izvršimo ovu komandu, spojit ćemo promjene sa test-branch na main, i onda ćemo imati sve na master branch.
git push && git pull
Sve prethodne komande koje smo spomenuli se koriste za rad na lokalnom repository, što znaći da smo mi jedini koji vidimo ove promjene i jedini koji radimo na projektu. Ali ako odlučimo da stavimo naš projekat na Internet, tako da sa nama mogu raditi kolege ili prijatelji, ili u slučaju da želimo napraviti backup našeg projekta. Kada napravimo neke promjene i commit ih na lokalni repository i kada su spremne da ih pošaljemo na remote repository koristimo komandu git push da dodamo te promjene na remote repository. Mi samo izvršimo komandu a git uradi svoju magiju i stavi sve na Internet, jednostavno.
1git push
Sada smo napravili smo backup našeg projekta i promjena na njemu i ne moramo živjeti u strahu da ćemo izgubiti sve ako na mašina poludi jedan dan
Komandu git pull koristimo da povučemo zadnje promjene sa remote repository na naš lokalni. Ako neko doda neke promjene na remote repository, a nama trebaju da ih koristimo, izvršimo ovu komandu i povučemo sve promjene na naš lokalni repo.
1git push
Sada kada imamo sve promjene na našem local repo, možemo da nastavimo raditi i koristiti fajlove sa remote repository.
NOTE: Ove komande koje smo prošli su korisne i dobro je da znamo šta rade i kako se koriste, ali nemojte samo stati na njima, posjetite Git stranicu i prođite kroz dokumentaciju i knjigu da bi proširli svoje znanje i dodali dodatne stvari u svoj skill
Neke od komandi koje nismo pokrili ovdje a vrijedne su da se spomenu, git reset koji koristimo da resetujemo commite, ako napravimo grešku u commit ili dodamo pogrešne fajlove ili šta god, onda koristimo git reset da ih vratimo i uklonimo taj commit sa git log liste. git rebase je također dobra kommanda koja ima dosta mogučnosti, definitivno pročitajte o njoj na officijelnoj dokumentaciji git
Drawing by Fatima Trtak
Local repository
- git add (Dodaje promijenjene fajlove u staged changes, i priprema ih za commit)
- git commit (Dodaje promjenjene fajlove u local repository)
- git status (Provjerava koji fajlovi su promjenjeni, a koji su dodani u staged changes)
- git log (Ispisuje listu commita na trenutnom branchu sa njihovim detaljima)
- git stash (Spašava promjene kada se mijenjamo branch i dozvoljava da ih poslije vratimo)
- git merge (Kombinuje brancheve sa jednog branch na drugi i spaja fajlove)
- git branch (Kreira novi branch i dozvoljava rad bez efekta na druge brancheve i fajlove)
- git checkout (Prebacuje se na drugi branch sa liste)
Remote repository
- git pull (Pull changes from a remote repository)
- git push (Push your local changes to the remote, and create a backup for them)
Zaključak
Prošli smo kroz ovaj dugi post, sa mnogo dobijenog korisnog znanja. Sada imamo više samopouzdanja kada radimo sa git. Prešli smo dodavanje fajlove i spašavanje na local repository, također smo prošli kako da provjerimo šta je promijenjeno a šta je spašeno. Naučili smo kako kreirati nove brancheve i kako ih koristiti da razdvojimo zadatke, i naučili smo kako dodati sve promjene na remote repository. Sada možemo da dijelomo naše projekte sa drugim, i moža i da radimo na njima zajedno.