Írta: tom1964h

Git reset, diff, checkout

Diff - különbségek

Ha folyamatosan dolgozunk egy working directory-ban, folyamatos commit-okkal frissítjük a repót. Ha a távoli repóba szeretnénk push-olni, előbb a Git figyelmeztet, ha valaki máshonnan már módosította a repót: push-olt egyet.
Ezért minden felküldés előtt le kell húznunk a távoli repót (frissítjük), azaz előbb egy pull, majd egy felküldés, azaz egy push.

Ha a lehúzott vagy a munkában lévő repó különbségeit szeretnénk vizsgálni, akkor a git diff parancsot használjuk:
git diff minden file-ra megmutatja a különbséget
git diff HEAD a legutolsó commit óta bekövetkezett különbségeket mutatja

HEAD: az az állapot, amikor még nem történtek módosítások, az utolsó commit (a git log parancs eredmény-listájának a legfelső sorát jelöli színesen).

Ha belemegyünk a SFJ_GIT repóba és módosítjuk a red.txt-t (szerkesztővel beleírunk egy betűt), elmentve a módosítást, megnézhetjük a különbséget:
git diff red.txt


Zöld színnel jelzi a hozzáadást és pirossal a törlést. Mindíg a commitolt változathoz (HEAD) hasonlítja az aktuális állapotot, ha több betűt vagy sorokat módosítottunk, akkor mindet egyszerre mutatja majd. De nem mutatja a különbségeket, ha a file már staged állapotú (azaz commitra vár).

git diff --staged
A stage-ben lévő file-ok különbségeit mutatja meg.

git diff --cached red.txt
Egyetlen file különbségeit is meg tudjuk vizsgálni.

Reset - levétel a stage-ről

Az előbb módosítottuk a red.txt file-t, majd hozzáadtuk a stage-hez. Ezt ellenőrizhetjük is a git status parancscsal. Ha mégsem szeretnénk commitolni az állományt, akkor erre szolgál a reset:
git reset red.txt
A hivatkozott file-t leveszi a stage-ről. A git status parancscsal ezt ellenőrizhetjük is:


Restore - végleges elvetés

Ha végleg el szeretnéd vetni a változtatást (fizikailag is), akkor erre nem a checkout, hanem a restore parancs szolgál:
git restore red.txt

Az eredményt a git status parancscsal ellenőrizheted le: a Git már nem talál módosítást. Ha megnézed a red.txt állományt, a módosítás eltűnt belőle.

Időközben, a Git 2.23-as verziójával a videóban látható git checkout parancs két részre lett osztva, hiszen egyszerre tudott branchet váltani és fájlt visszaállítani. A visszaállítás restore, a branch váltás pedig switch lett (innen: K.M. kommentje a Youtube-video alatt).

megjegyzés: a checkout parancs nem tűnt el, nagyon fontos szerepe van a branch-ek kezelésében (lásd következő oldalon)