Visszaállítás
Előfordulhat, hogy valamit nagyon elrontunk a kódunkban és egy visszaállításra van szükségünk. Ha a még nem commitolt fájlokat szeretnénk visszaállítani az eredeti állapotra, akkor az alábbi parancsot adjuk ki:
git checkout .
Ha a repository-t egy korábbi, már commitolt állapotra szeretnénk visszaállítani, akkor a pont helyett a commit azonosítót kell megadni. A commit azonosító a naplóból nyerhető ki:
git log
A naplóban a fel és le gombok segítségével tudunk mozogni, kilépni pedig a q gomb megnyomása után.
git log -10
Csak az utolsó 10 napló bejegyzés adatait mutatja a képernyőn. A szám tetszőlegesen változtatható.
Elágazások, branch-ek
Az elágazások remek lehetőséget biztosítanak a kódunk eltérő verzióinak kezelésére. Tételezzük fel, hogy adott egy termék 1.0 verziója, amit még támogatni kell, a felmerülő kisebb-nagyobb hibákat javítjuk, de újabb funkciókat nem szeretnénk integrálni, csak a később megjelenő 2.0 változatba.
A 2.0 változat kerülhetne egy külön repository-ba, de nem lenne egy szerencsés döntés, mert így a korábban, az 1.0-t érintő biztonsági és egyéb javításokat manuálisan kellene integrálni az új változatba is. Jobb megoldás ebben az esetben egy új ágat létrehozni.
Ágat az alábbi parancs segítségével tudunk létrehozni:
git branch [ág neve]
Az ág létrehozás feltétele, hogy a fő master ágban legalább egy commit legyen. Az ágak GIT esetén az adatbázisban tárolódnak. Ágat váltani a checkout parancs segítségével tudunk:
git checkout [ág neve]
Arról, hogy éppen melyik ágban vagyunk, a prompt ad információt. A prompt végén zárójelben az aktuális branch jelenik meg. Az ág váltáskor a repository mappában lévő fájlok kicserélődnek az ágban tárolt fájlokra. Ezért ág váltás előtt érdemes egy commit művelettel rögzíteni a változásokat. A fő ág neve alapértelmezett esetben master.
Adódhat, hogy két ág tartalmát össze kell fésülnünk. Például új funkciót lefejlesztünk egy kísérleti ágban, majd ha tetszik az eredmény, akkor át kellene költöztetni a fő ágba. Ez a merge parancs segítségével lehetséges:
git merge [ág neve]
A parancsot abból az ágból kell kiadni, amibe be szeretnénk olvasztani az ágat. A beolvasztás az esetek többségében sikeres lesz, viszont adódhat olyan helyzet, hogy konfliktus keletkezik. A konfliktusok feloldása csak manuálisan lehetséges. Ez az egész verziókezelés legnehezebb része, univerzális megoldás egy problémára sincs. Ilyenkor érdemes megtekinteni a git kézikönyv ajánlásait:
git help merge
Ha nagyon zátonyra futnánk a beolvasztás közben, akkor visszavonni a merge műveletet az abort paraméter segítségével tudjuk:
git merge --abort
Egy ágat törölni az alábbi parancsok egyikével tudunk:
git branch -d [ág neve]
git branch -D [ág neve]
A -d és -D paraméter működése nem azonos. A kisbetűs változat a törlést nem fogja végrehajtani, ha a törölni kívánt ág nem lett beolvasztva. A nagybetűs változat „erőszakosabb”, mivel akkor is törli az ágat, ha még nincs beolvasztva.
Tag-ek kezelése
A létrehozott tag-ek a tag alparancs segítségével tekinthetőek meg:
git tag
Amennyiben egy új tag-et szeretnénk létrehozni, akkor a tag parancs argumentuma lesz az új tag, amivel később hivatkozhatunk az aktuális commit-ra a hosszú hexadecimális azonosítója nélkül. Az alábbi példa ezt mutatja be:
git tag v1.0
git chekcout v1.0
A tag-ek ugyan úgy, mint a kommitok először lokálisan jönnek létre. Ha a szerverre is át szeretnénk vinni őket, akkor az alábbi parancsot kell kiadni:
git push origin --tags
Patch fájlok
Patch fájlt az aktuális módosításainkról az alábbi parancs segítségével hozhatunk létre:
git format-patch [ág neve] --stdout > [fájl neve].patch
A parancsot azért érdemes a –stdout argumentummal hívni, majd egy patch fájlba irányítani, mert így egy fájlt kapunk. Ellenkező esetben pedig minden commit külön fájlba kerülne.
A patch-ek alkalmazása hasonlóan egyszerű. Mielőtt egy patch-et alkalmaznánk, érdemes megnézni, hogy milyen változásokat tartalmaz a fájl:
git apply --stat [fájnév].patch
Valamint érdemes azt is megnézni, hogy mennyire lesz problémás az integrálás:
git apply --check [fájlnév].patch
Ha a parancs kimenete nem dob hibákat, akkor gond nélkül integrálható. Integrálásra az apply parancs használható argumentumok nélkül. Azonban ha így alkalmazzuk, akkor a készítő által rögzített, patch fájlban is tárolt commit-ok leírásai elvesznek. Ez a későbbiek során visszakövethetőség miatt hasznos tud lenni, ezért az apply helyett az alábbi parancs segítségével érdemes elvégezni a beolvasztást:
git am --signoff < [fájl neve].patch
Egyéb hasznos parancsok és információk
Súgót minden parancsról kérhetünk. Csupán a git help után meg kell adni a művelet nevét és megjelenik az adott alparancs dokumentációja. Például:
git help clone
További súgót a Git hivatalos kézikönyve tud nyújtani. Ez a https://git-scm.com/book/en/v2 címen érhető el. Ebből minden kiderül, ami fejlesztőként érdekes lehet. Adódhat olyan is, hogy saját szerverre (pl otthoni NAS) szeretnénk költöztetni egy Git tárolót. Ehhez nyújt egy remek kiindulási pontot az alábbi linken megtekinthető leírás: https://www.linuxfoundation.org/blog/blog/classic-sysadmin-how-to-run-your-own-git-server
Nagy méretű repository-k esetén adódhat, hogy az adatbázis nagyra hízik a sok commit adat tárolása miatt. Ezért néha napján érdemes lefuttatni a szemétgyűjtő parancsot, ami a régi commit-ok adatait letömöríti és optimalizálja az adatbázis felépítését, hogy gyorsabban működjön a verziókezelés. Ennek parancsa:
git gc