Ultimate Guide to Git Reset and Git Revert

Tervetuloa lopulliseen oppaaseen git resetja git revertkomentoihin. Tämä opetusohjelma opettaa sinulle kaiken, mitä sinun tarvitsee tietää yleisten virheiden korjaamisesta ja huonojen tekojen kumoamisesta Gitin käytön aikana.

Ymmärrä Git-projektin kolme osaa

Git-projektilla on seuraavat kolme pääosaa:

  1. Git-hakemisto
  2. Työhakemisto (tai työpuu)
  3. Vaihealue

Git hakemisto (sijaitsee YOUR-PROJECT-PATH/.git/) on silloin Git varastoi kaiken tarvittavan seurata tarkasti hankkeen. Tämä sisältää metatiedot ja objektitietokannan, joka sisältää pakatut versiot projektitiedostoista.

Työhakemiston on, jos käyttäjä tekee paikallisia muutoksia projektiin. Työhakemisto vetää projektin tiedostot Git-hakemiston objektitietokannasta ja sijoittaa ne käyttäjän paikalliseen koneeseen.

Huomaa: Hakemisto tunnetaan myös nimellä arkisto tai lyhyt lomake. Käyttäjän paikallisen koneen repoa kutsutaan "paikalliseksi repoksi", kun taas git-palvelimen repoa kutsutaan "etärepoksi".

Lavastusalue on tiedosto (kutsutaan myös "indeksi", "vaihe" tai "välimuisti"), joka tallentaa tietoa siitä, mitä menee seuraavaan pysyvään. Sitoumus on, kun käsket Gitä tallentamaan nämä vaiheittaiset muutokset. Git ottaa tilannekuvan tiedostoista sellaisina kuin ne ovat, ja tallentaa kyseisen tilannekuvan pysyvästi Git-hakemistoon.

Kolmessa osassa on kolme päätilaa, joissa tiedosto voi olla milloin tahansa: muokattu, sitoutettu tai vaiheitettu. Voit muokata tiedostoa aina, kun teet siihen muutoksia työhakemistossasi. Seuraavaksi se järjestetään, kun siirrät sen lavastusalueelle. Lopuksi se on sitoutunut sitoumuksen jälkeen.

Git Reset

git resetKäskyllä voit nollata nykyinen vetäjä tiettyyn tilaan. Voit nollata tiettyjen tiedostojen ja koko haaran tilan. Tämä on hyödyllistä, jos et ole vielä siirtänyt sitoutumistasi GitHubiin tai muuhun etätietovarastoon.

Nollaa tiedosto tai tiedostojoukko

Seuraava komento antaa sinun valita valikoivasti sisällön osia ja palauttaa sen tai poistaa sen vaiheet.

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

Poista tiedosto vaiheelta

Jos siirrit tiedoston pysäytysalueelle git add, mutta et enää halua sen olevan osa sitoutumista, voit git resetpoistaa tiedoston vaiheesta käyttämällä :

git reset HEAD FILE-TO-UNSTAGE

Tekemäsi muutokset ovat edelleen tiedostossa, tämä komento vain poistaa kyseisen tiedoston pysäytysalueeltasi.

Palauta haara aikaisempaan sitoutumiseen

Seuraava komento palauttaa nykyisen haarasi HEAD annetun COMMITja päivittää hakemiston. Periaatteessa se kelaa haarasi tilan takaisin, ja sitten kaikki tekemäsi sitoumukset, jotka teet eteenpäin, kirjoittavat kaiken, mikä tuli nollauspisteen jälkeen. Jos jätät sen pois MODE, se on oletuksena --mixed:

git reset MODE COMMIT

Vaihtoehdot MODEovat:

  • --soft: ei nollaa hakemistotiedostoa tai toimivaa puuta, mutta palauttaa HEAD-arvon commit. Vaihtaa kaikki tiedostot "Muutokset tehtäväksi"
  • --mixed: nollaa hakemiston, mutta ei työpuuta, ja ilmoittaa, mitä ei ole päivitetty
  • --hard: nollaa hakemiston ja työpuun. Kaikki työpuun seuratuissa tiedostoissa tehdyt muutokset commithylätään
  • --merge: nollaa hakemiston ja päivittää työpuun tiedostot, jotka eroavat toisistaan commitja HEAD, mutta säilyttää ne, jotka ovat erilaiset hakemiston ja työpuun välillä
  • --keep: nollaa hakemistomerkinnät ja päivittää työpuun tiedostot, jotka ovat erilaiset commitja HEAD. Jos tiedostossa, joka on eri commitkuin HEAD, on paikallisia muutoksia, nollaus keskeytetään

Tärkeä huomautus kovista palautuksista

Ole erittäin varovainen, kun käytät --hardvaihtoehtoa, git resetkoska se nollaa sitoutumisen, lavastusalueen ja työhakemistosi. Jos tätä vaihtoehtoa ei käytetä oikein, kirjoitettu koodi voi menettää.

Git Revert

Sekä git revertja git resetkomennot kumota edellinen toimituksena. Mutta jos olet jo siirtänyt sitoutumisen etätietovarastoon, on suositeltavaa, ettet käytä sitä, git resetkoska se kirjoittaa uudestaan ​​sitoutumishistorian. Tämä voi tehdä työskentelystä tietovarastossa muiden kehittäjien kanssa ja yhtenäisen historiatietojen ylläpitämisen erittäin vaikeaksi.

Sen sijaan on parempi käyttää git revert, mikä kumoaa edellisen sitoumuksen tekemät muutokset luomalla kokonaan uuden sitoumuksen muuttamatta sitoumusten historiaa.

Palauta sitoumus tai sitoumusjoukko

Seuraava komento antaa sinun palauttaa muutokset edellisestä sitoutumisesta tai sitoutumisesta ja luoda uuden sitoutumisen.

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

Yleiset vaihtoehdot:

 -e --edit
  • Tämä on oletusasetus, eikä sitä tarvitse asettaa erikseen. Se avaa järjestelmän oletustekstieditorin ja antaa sinun muokata uutta sitoutumisviestiä ennen palautuksen tekemistä.
  • Tämä vaihtoehto tekee päinvastoin kuin -e, ja git revertei avaa tekstieditori.
  • Tämä vaihtoehto estää git revertedellisen sitoutumisen kumoamisen ja uuden luomisen. Uuden sitoutumisen luomisen sijaan -nse kumoa edellisen sitoutumisen muutokset ja lisää ne Staging Index- ja Working Directory -hakemistoon.
 --no-edit
-n -no-commit

Esimerkki.

Kuvitellaan seuraavaa tilannetta: 1.) Olet tekemässä tiedostoa ja lisäät ja teet muutokset. 2.) Sitten työskentelet muutamilla muilla asioilla ja teet lisää sitoumuksia. 3.) Nyt huomaat, kolme tai neljä sitoutumista sitten, teit jotain, jonka haluat kumota - kuinka voit tehdä tämän?

Saatat ajatella, käytä vain git reset, mutta tämä poistaa kaikki tehdyt muutokset sen jälkeen, kun haluat muuttaa - git revertpelastus! Käydään läpi tämä esimerkki:

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`

Ja sen avulla olet askeleen lähempänä mustan vyön saamista Gitiin.