Végső útmutató a Git visszaállításához és a Git visszaállításához

Üdvözöljük a git resetés git revertparancsok végső útmutatójában . Ez az oktatóanyag megtanít mindent, amit tudnia kell a Git használata közben a gyakori hibák kijavításáról és a rossz elkövetések visszavonásáról.

Ismerje meg a Git projekt három szakaszát

Egy Git projektnek a következő három fő szakasza van:

  1. Git könyvtár
  2. Munkakönyvtár (vagy működő fa)
  3. Összpontosítási körlet

A Git könyvtár (itt található YOUR-PROJECT-PATH/.git/) a Git tárolja mindazt, ami a projekt pontos nyomon követéséhez szükséges. Ez magában foglalja a metaadatokat és az objektumadatbázist, amely a projektfájlok tömörített verzióit tartalmazza.

A munka könyvtár az a hely, ahol a felhasználó helyi módosításokat hajt végre a projektben. A munkakönyvtár kivonja a projekt fájljait a Git könyvtár objektum adatbázisából, és elhelyezi a felhasználó helyi gépén.

Megjegyzés: A könyvtár más néven Repository vagy rövid formájú repo. A felhasználó helyi gépén lévő repót "Local repo" -nak, míg a git szerveren lévő repót "Remote repo" -nak hívják.

Az átmeneti terület egy fájl (más néven "index", "szakasz" vagy "gyorsítótár"), amely információkat tárol arról, hogy mi kerül a következő elkötelezettségbe. Elkötelezettség az, amikor azt mondod Gitnek, hogy mentse ezeket a fokozatos változásokat. A Git pillanatképet készít a fájlokról, amint vannak, és véglegesen tárolja a pillanatképet a Git könyvtárban.

Három szakasz esetén három fő állapot van, amelyekben egy fájl bármikor lehet: módosított, elkötelezett vagy szakaszos. Bármikor módosít egy fájlt, amikor módosítja azt a munkakönyvtárban. Ezután akkor kerül megrendezésre, amikor áthelyezi az állomás területére. Végül egy elkötelezettség után követik el.

Git Reset

A git resetparancs lehetővé teszi az aktuális fej visszaállítását egy meghatározott állapotba. Visszaállíthatja egyes fájlok, valamint egy egész ág állapotát. Ez akkor hasznos, ha még nem tette meg a kötelezettségvállalását a GitHub vagy más távoli adattár felé.

Állítson vissza egy fájlt vagy fájlkészletet

A következő paranccsal szelektíven kiválaszthatja a tartalom darabjait, és visszavonhatja vagy visszavonhatja azt.

git reset (--patch | -p) [tree-ish] [--] [paths]

Szüntesse meg a fájl állományát

Ha egy fájlt áthelyezett az átmeneti területre a következővel git add, de már nem szeretné, hogy az része legyen egy elkötelezettségnek, akkor git reseta fájl sorrendjét törölheti:

git reset HEAD FILE-TO-UNSTAGE

A végrehajtott változtatások továbbra is a fájlban lesznek, ez a parancs csak eltávolítja azt a fájlt az átmeneti területről.

Visszaállít egy fiókot egy korábbi elkötelezettségre

A következő parancs visszaállítja az aktuális fiók HEAD-ját a megadottra, COMMITés frissíti az indexet. Alapvetően visszacsévéli a fióktelep állapotát, majd minden olyan kötelezettségvállalást, amelyet előre teszel, írj át bármire, ami a visszaállítási pont után következett. Ha kihagyja MODE, akkor az alapértelmezett --mixed:

git reset MODE COMMIT

A következő lehetőségek MODEállnak rendelkezésre:

  • --soft: nem állítja vissza az indexfájlt vagy a működő fát, de visszaállítja a HEAD elemet commit. Az összes fájlt "Elkövetendő változtatások" -ra változtatja
  • --mixed: alaphelyzetbe állítja az indexet, de a működő fát nem, és jelentést ad a frissítésről
  • --hard: visszaállítja az indexet és a működő fát. A munkafában a nyomon követett fájlokban bekövetkezett bármilyen változás commitelvetésre került
  • --merge: alaphelyzetbe állítja az indexet és frissíti a munkafában található fájlokat, amelyek különböznek a commitHEAD-től, de megtartja azokat, amelyek különböznek az index és a működő fa között
  • --keep: alaphelyzetbe állítja az indexbejegyzéseket és frissíti a munkafában lévő fájlokat, amelyek különböznek a commitHEAD-től. Ha egy, a commitHEAD és a HEAD között különbözõ fájlnak vannak helyi változásai, akkor a visszaállítás megszakad

Fontos megjegyzés a kemény visszaállításokról

Legyen nagyon körültekintő, ha az --hardopcióval együtt használja , git resetmivel az alaphelyzetbe állítja az elkötelezettséget, az átmeneti területet és a munkakönyvtárat. Ha ezt az opciót nem használják megfelelően, akkor az elveszítheti a beírt kódot.

Git Revert

A git revertés a git resetparancsok visszavonják a korábbi elkötelezettségeket. De ha már elküldte az elkötelezettségét egy távoli adattárhoz, akkor azt javasoljuk, hogy ne használja, git resetmivel az újraírja a végrehajtások előzményeit. Ez nagyon megnehezítheti más fejlesztőkkel való együttmûködést és a következetes előzmények fenntartását.

Ehelyett jobb használni git revert, amely visszavonja az előző kötelezettségvállalás által végrehajtott változtatásokat egy teljesen új kötelezettségvállalás létrehozásával, mindez a változtatások előzményeinek megváltoztatása nélkül.

Visszavonja az elkötelezettséget vagy az elkövetések halmazát

A következő paranccsal visszaállíthatja az előző vagy végrehajtott módosításokat, és létrehozhat egy új kötelezettségvállalást.

git revert [--[no-]edit] [-n] [-m parent-number] [-s] [-S[]] … git revert --continue git revert --quit git revert --abort

Általános lehetőségek:

 -e --edit
  • Ez az alapértelmezett opció, és nem kell kifejezetten beállítani. Megnyitja a rendszer alapértelmezett szövegszerkesztõjét, és lehetõvé teszi az új véglegesítési üzenet szerkesztését, mielõtt a visszavonást elvégezné.
  • Ez az opció az ellenkezőjét teszi -e, és git revertnem nyitja meg a szövegszerkesztőt.
  • Ez az opció megakadályozza, git reverthogy visszavonja a korábbi elkötelezettséget és létrehozzon egy újat. Új kötelezettségvállalás létrehozása helyett -nvisszavonja az előző kötelezettségvállalás módosításait, és hozzáadja azokat az Átmeneti indexhez és a Munkakönyvtárhoz.
 --no-edit
-n -no-commit

Példa.

Képzeljük el a következő helyzetet: 1.) Fájlon dolgozik, és hozzáadja és végrehajtja a változtatásokat. 2.) Ezután dolgozzon még néhány dolgon, és még néhányat vállaljon. 3.) Most már rájössz, hogy három vagy négy alkalommal elkötelezte magát, olyasmit tett, amit vissza szeretnél vonni - hogyan tudod ezt megtenni?

You might be thinking, just use git reset, but this will remove all of the commits after the one you would like to change - git revert to the rescue! Let's walk through this example:

mkdir learn_revert # Create a folder called `learn_revert` cd learn_revert # `cd` into the folder `learn_revert` git init # Initialize a git repository touch first.txt # Create a file called `first.txt` echo Start >> first.txt # Add the text "Start" to `first.txt` git add . # Add the `first.txt` file git commit -m "adding first" # Commit with the message "Adding first.txt" echo WRONG > wrong.txt # Add the text "WRONG" to `wrong.txt` git add . # Add the `wrong.txt` file git commit -m "adding WRONG to wrong.txt" # Commit with the message "Adding WRONG to wrong.txt" echo More >> first.txt # Add the text "More" to `first.txt` git add . # Add the `first.txt` file git commit -m "adding More to first.txt" # Commit with the message "Adding More to first.txt" echo Even More >> first.txt # Add the text "Even More" to `first.txt` git add . # Add the `first.txt` file git commit -m "adding Even More to First.txt" # Commit with the message "Adding More to first.txt" # OH NO! We want to undo the commit with the text "WRONG" - let's revert! Since this commit was 2 from where we are not we can use git revert HEAD~2 (or we can use git log and find the SHA of that commit) git revert HEAD~2 # this will put us in a text editor where we can modify the commit message. ls # wrong.txt is not there any more! git log --oneline # note that the commit history hasn't been altered, we've just added a new commit reflecting the removal of the `wrong.txt`

And with that you're one step closer to getting your black belt in Git.