A Cookbook magyarra fordítva szakácskönyvet, receptgyűjteményt jelent. Informatikában az ilyen típusú írások nem foglalkoznak mélyrehatóan a problémák mögött álló elmélettel, csupán gyors megoldást kínálnak egy-egy adott helyzetre. Minden problémásabb parancs után, vagy mellett található komment a működését próbálja leírni, elmagyarázni.
History
A Git history az időről alkotott jelenlegi koncepcióink alapján működik: csak egy irányba halad. Ami távoli szerverre felkerült history bejegyzés, annak eltávolítása minden esetben problémás és nem egyszerű feladat.
Konfigurálás
git config --global user.name "John Doe"
# Commitok esetén megjelenő név beállítása
git config --global user.email johndoe@example.com
# Commithoz használt e-mail cím
git config --global core.editor nano
# Default editor beállítása. Én a nano-t preferálom.
git config --global http.proxy http://user:password@szerver:port
# Proxy beállítása
A beállítások megadhatók repository-ra is. Ebben az esetben a repository-n belül kell kiadni a parancsokat és nem kell a --global beállítás
Kilépés a VIM-ből
Ha nem állítottunk be rendes szerkesztőt, mint a nano vagy VS Code, akkor bizony minden commit üzenet megírás, szerkesztési művelet esetén a ViM fog elindulni. A ViM egy nagyon jó szerkesztő, de kezdőknek általában inkább hasonlít egy véletlen szöveg generátorra, amiből kilépni se lehet egyszerűen. A problémát megelőzendő a kilépés menete:
ESC # Editor módból command módba váltás
:q! # Kilépés mentés nélkül parancsa
ENTER # Command futtatása
SSH kulcs generálása
SSH-val a Git gyorsabb, mint HTTP-n keresztül. Viszont Visual Studio 2017 esetén SSH-n keresztül nem lehet klónozni, csak parancssorból. Klónozás után azonban a többi művelet ugyanúgy működik Visual Studio segítségével is. Visual Studio 2019 esetén már nincs ez a probléma.
Az SSH beállításának első lépése a kulcs generálás. A kulcs generálás folyamán lehetőségünk van a kulcs szimmetrikus titkosítására is, ha a folyamat során jelszót adunk meg. Ha jelszót adunk meg, akkor minden művelet előtt kérni fogja ezt.
A második lépés a publikus kulcs feltöltése a gitlab/github/bitbucket profilunkba. Ennek ismeretében fogja tudni a rendszer, hogy miként kell titkosítani az adatokat átvitel közben
A privát kulcsunkat sose adjuk ki senkinek. A publikus és privát kulcsaink a profilunk alatti .ssh mappában tárolódnak.
ssh-keygen -o -t rsa -b 4096 -C "email@example.com"
# SSH kulcs generálása 4096 bites RSA segítségével a megadott e-mail címhez
cat ~/.ssh/id_rsa.pub | clip
# Publikus kulcs másolása a vágólapra.
Repository klónozása
git clone repo_címe
Repository frissítése
A repository-t két módon frissíthetjük. Az első megközelítés az óvatos módszer. A fetch leszedi a frissítéseket, de nem alkalmazza őket. A status parancs fetch után mutatja, hogy a local history mennyivel van lemaradva, vagy előrébb a remote-hoz képest.
git fetch
git status
git pull
A második módszer röviden a "bele a lecsóba" módszer. A pull lényegében egy fetch és merge parancs kombinálva, ami merge conflict-ot eredményezhet.
git pull
branch-be a master legújabb commitjainak beolvasztása
git pull
# Letölti a szerveren lévő commitokat az adott branch-hez és mergeli őket, valamint a többi branch history-t is leszedi.
git merge origin/master
# Mergeli az origin/master állapotát. Figyelem! Ha csak a master-t írod be, akkor a helyi, local master branch-et olvassza be, ami nem biztos, hogy naprakész.
Commit készítése parancssorból és feltöltése a szerverre
git commit
git push
A commit parancs esetén az alapértelmezett szerkesztő fog elindulni, amiben megadhatjuk a commit leírását.
Utolsó lokális Commit szerkesztése
git commit --amend
# Commit üzenet szerkesztése
git add .
git commit --amend --no-edit
# utolsó commit-ból kimaradt szerkesztett fájlok hozzáfűzése a commit-hoz úgy, hogy a message nem változik.
History lekérdezése törlés és amend előtt hasznos formában
git reflog
# aktuális branch history commitok számának tekintetében
git reflog --relative-date
# commit száma helyett idő mutatása
git reflog show branch_neve
# megadott nevű branch history
A reflog a branch-re történt commitokat mutatja meg az időben visszamenőleg számozással.
Branch létrehozása a jelenlegi branch alapján:
git pull
# jelenlegi legfrissebb állapot lekérdezése
git checkout -b branch_neve
# létrehozza a branch-et és checkout.
git push -u origin branch_neve
# távoli szerverre a branch feltöltése
Valami félrement és vissza akarunk állni utolsó commitra:
git reset --hard
# Visszaállít minden fájlt az utolsó commit állapotába, --soft esetén a módosítások megmaradnak, mint nem commitolt változtatás
git clean -f -d
# Töröl minden nem követett (újonnan hozzáadott) fájlt és mappát
Utolsó n darab local commit törlése
git reset HEAD~n #n helyére egy pozitív egész szám írandó
Local-ba léteznek olyan branch-ek, amik a szerveren már nincsenek, törölni kellene őket
git remote prune origin
Adott commit alapján az azt megelőző Tag kikeresése
git describe --contains [commitId]
master beolvasztása úgy, hogy a szerkesztett fájlokat ne kelljen commitolni a branch-en
git stash -u
# Stash-be tesz minden fájlt. A -u az újonnan hozzáadott fájlokat is oda teszi.
git pull
git merge origin/master
git stash apply
# A stash visszatöltése
Két tag között mi változott
Célszerű minden kiadott verzióhoz egy tag-et rendelni. Így a két tag/verzió között könnyen lekérdezhetővé válik, hogy ténylegesen mi is változott. Az alábbi history lekérdező parancsok igazából bármelyik két commit esetén működnek, mivel a tag csak egy mutató egy commit-ra.
git log tag1..tag2
Ha csak a változott fájlok listája érdekel bennünket:
git diff tag1 tag2 --stat
Ha a fájlok tartalmának változásaira is kíváncsiak vagyunk:
git diff tag1 tag2
#Ha a Visual Studio code telepítve van, akkor a diff abban kerül megjelenítésre
git diff tag1 tag2 -- | code -
Csak adott branch history bejegyzések mutatása
git log master..
#Branch-en kell kiadni
git log master..branchname
#master branch-en használható alternatívája. Bármelyik két branch között használható igazából