„Git Reset“ ir „Git Revert“ pagrindinis vadovas

Sveiki atvykę į mūsų pagrindinį vadovą git resetir git revertkomandas. Ši pamoka išmokys viską, ką reikia žinoti apie dažniausiai pasitaikančių klaidų taisymą ir blogų įsipareigojimų panaikinimą naudojant „Git“.

Supraskite tris „Git“ projekto dalis

„Git“ projekte yra trys pagrindiniai skyriai:

  1. „Git“ katalogas
  2. Darbinis katalogas (arba darbinis medis)
  3. Sustojimo vieta

Git“ kataloge (esančiame YOUR-PROJECT-PATH/.git/) „Git“ yra viskas, ko reikia norint tiksliai stebėti projektą. Tai apima metaduomenis ir objektų duomenų bazę, kurioje yra suglaudintos projekto failų versijos.

Dirba katalogas yra kai vartotojas pateikia vietos pakeitimus projekte. Darbinis katalogas ištraukia projekto failus iš katalogo „Git“ objektų duomenų bazės ir patalpina juos į vartotojo vietinę mašiną.

Pastaba: Katalogas taip pat žinomas kaip saugykla arba trumposios formos atpirkimas. Atpirkimas vartotojo vietinėje mašinoje vadinamas „Vietinis atpirkimas“, o „git“ serverio atpirkimas - „Nuotolinis atpirkimas“.

Sustojimo vieta yra failas (taip pat vadinamas "puslapis", "etape", arba "talpyklos"), kuri saugo informaciją apie tai, kas bus eiti į savo kitą įsipareigoti. Įsipareigojimas yra tada, kai liepiate Gitui išsaugoti šiuos etapinius pakeitimus. „Git“ nufotografuoja failus tokius, kokie jie yra, ir visam laikui išsaugo juos „Git“ kataloge.

Su trimis skyriais yra trys pagrindinės būsenos, kuriose failas gali būti bet kuriuo metu: modifikuotas, perduotas ar surengtas. Jūs keisti failą bet kada keisti jį į savo darbo kataloge. Toliau jis yra pastatytas, kai perkelsite jį į sustojimo zoną. Galiausiai, tai įvykdyta po įsipareigojimo.

„Git Reset“

git resetKomanda leidžia jums pakeisti savo esamą galvą į tam tikrą būseną. Galite iš naujo nustatyti konkrečių failų, taip pat viso filialo būseną. Tai naudinga, jei dar neperkėlėte savo įsipareigojimų į „GitHub“ ar kitą nuotolinę saugyklą.

Iš naujo nustatykite failą arba failų rinkinį

Naudodami šią komandą galite pasirinktinai pasirinkti turinio dalis ir ją grąžinti arba pašalinti.

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

Atstatykite failą

Jei perkėlėte failą į sustojimo sritį naudodami git add, bet nebenorite, kad tai būtų įsipareigojimo dalis, galite git resetištrinti tą failą:

git reset HEAD FILE-TO-UNSTAGE

Atlikti pakeitimai vis tiek bus faile, ši komanda tiesiog pašalina tą failą iš jūsų sustojimo srities.

Atstatykite filialą į ankstesnį įsipareigojimą

Ši komanda iš naujo nustato dabartinio filialo HEAD pateiktą COMMITir atnaujina indeksą. Iš esmės tai atsuka jūsų filialo būseną, tada visi įsipareigojimai, kuriuos atliekate toliau, rašo viską, kas buvo po atstatymo taško. Jei praleisite MODE, pagal nutylėjimą --mixed:

git reset MODE COMMIT

Galimybės MODEyra šios:

  • --soft: nenustato indekso failo ar darbo medžio, bet iš naujo nustato HEAD commit. Visi failai pakeičiami į „Būtini pakeitimai“
  • --mixed: iš naujo nustato indeksą, bet ne darbinį medį ir praneša apie tai, kas nebuvo atnaujinta
  • --hard: atstato indeksą ir veikiantį medį. Bet kokie sekantys failų pakeitimai darbiniame medyje commityra atmesti
  • --merge: iš naujo nustato indeksą ir atnaujina darbo medyje esančius failus, kurie skiriasi nuo „ commitHEAD“, tačiau išsaugo skirtingus rodyklės ir veikiančio medžio failus
  • --keep: atstato indekso įrašus ir atnaujina darbo medžio failus, kurie skiriasi nuo „ commitHEAD“. Jei faile, kuris skiriasi nuo commitHEAD, yra vietinių pakeitimų, atstatymas nutrauktas

Svarbi pastaba apie kietąjį atstatymą

Būkite labai atsargūs naudodami --hardparinktį, git resetnes ji atstato jūsų įsipareigojimą, sustojimo sritį ir darbo katalogą. Jei ši parinktis nėra tinkamai naudojama, galite prarasti parašytą kodą.

Git Revert

Ir komandos, git revertir git resetkomandos anuliuoja ankstesnius įsipareigojimus. Bet jei jau atidavėte įsipareigojimą nuotolinei saugyklai, rekomenduojama nenaudoti, git resetnes jis perrašo įsipareigojimų istoriją. Dėl to gali būti labai sunku dirbti su kitais kūrėjais ir išlaikyti nuoseklią įsipareigojimų istoriją.

Geriau naudoti git revert, o tai panaikina ankstesnio įsipareigojimo padarytus pakeitimus sukuriant visiškai naują įsipareigojimą, nepakeičiant įsipareigojimų istorijos.

Grąžinti įsipareigojimą ar įsipareigojimų rinkinį

Ši komanda leidžia grąžinti ankstesnio įsipareigojimo ar įsipareigojimų pakeitimus ir sukurti naują įsipareigojimą.

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

Dažniausios parinktys:

 -e --edit
  • Tai yra numatytoji parinktis ir jos nereikia aiškiai nustatyti. Tai atidaro jūsų sistemos numatytąjį teksto redaktorių ir leidžia redaguoti naują įsipareigojimo pranešimą prieš atliekant grąžinimą.
  • Ši parinktis veikia priešingai -eir git revertneatidaro teksto redaktoriaus.
  • Ši parinktis neleidžia git revertanuliuoti ankstesnio įsipareigojimo ir sukurti naujo. Užuot sukūręs naują įsipareigojimą, -nanuliuos ankstesnio įsipareigojimo pakeitimus ir pridės juos prie „Staging Index“ ir „Working Directory“.
 --no-edit
-n -no-commit

Pavyzdys.

Įsivaizduokime tokią situaciją: 1.) Jūs dirbate su byla ir pridedate bei atliekate pakeitimus. 2.) Tada dirbate su keletu kitų dalykų ir dar labiau įsipareigojate. 3.) Dabar suprantate, kad prieš tris ar keturis įsipareigojimus padarėte tai, ką norėtumėte anuliuoti - kaip tai padaryti?

Galbūt galvojate, tiesiog naudokitės git reset, bet tai pašalins visus įsipareigojimus po to, kurį norėtumėte pakeisti - git revertgelbėti! Peržvelkime šį pavyzdį:

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`

Ir tuo jūs esate vienu žingsniu arčiau, kad gautumėte savo juodą diržą „Git“.