Í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égetgit 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)