Reset ja revert

Reset vs Revert

Nii reset kui ka revert on käsud, mis on mõeldud Git-is muudatuste tagasivõtmiseks. Peamine erinevus seisneb selles, millise jälje nad endast maha jätavad ning seeläbi projekti ajalugu mõjutavad.

Git Reset

Git reset on justkui aja tagasikeeramine - sellega liigutakse tagasi mingi kindla commit-i juurde. Täpsemalt liiguvad haru pointer (viide viimasele commit-ile mingi kindla haru ajaloos) ja HEAD (viide viimasele commit-ile selles harus, kus parasjagu töötad).

Git reset-i saab teha kolmel erineval viisil:

  • Soft reset (--soft)

Giti soft reset on viis tehtud muudatuste tagasivõtmiseks ja konkreetse commit-i juurde naasmiseks, säilitades tehtud muudatused. See liigutab pointer-i ja HEAD-i valitud kohta, kuid jätab Sinu muudatused staged olekusse.

Staged muudatused on sellised, mis on küll salvestatud, aga mida pole veel commit-itud. Muudatuste stage’imiseks kasutatakse git add käsku.

  • Mixed reset (vaikimisi)

Selle käsuga liigutatakse pointer-it ja HEAD-i ning staged staatuses olevad muudatused pole enam staged olekus. Varem staged olekus olnud failid küll säilitavad oma muudatused, aga need peab peale reset-i uuesti git add abil stage’ima.

See on kasulik olukorras, kus tahad muudatused tühistada, aga siiski hoida need enda töökataloogis.

  • Hard reset (--hard)

Selle käsuga liiguvad pointer ja HEAD, tühjendatakse staging area ja tühistatakse kõik muudatused töökataloogis. Lühidalt - kustutatakse kõik commit-imata muudatused.

Git revert

Git revert on justkui turvalisem versioon git reset-ist. See loob uue commit-i, et tühistada mingi varasema commit-i poolt sisse toodud muudatused. Erinevalt git reset-ist ei muuda (kirjuta üle) revert ajalugu, vaid hoopis lisab sellele.

Kokkuvõte

../../_images/resetrevert.png

Kasuta git reset-i, kui soovid harus tehtud muudatused tühistada. See on kasulik, kui oled teinud vea või kui soovid puhtalt lehelt alustada.

Kasuta git revert-i, kui soovid tagasi võtta repos tehtud muudatusi. See on kasulik, kui oled commit-is teinud vea või kui tahad muuta seda, kuidas commit tehtud on.

Praktiline ülesanne git reset kohta

Projekt, millega ülesandeid lahendada: https://gitlab.cs.ttu.ee/iti0105-2024/git-workshop

Juhised projekti kloonimiseks/forkimiseks leiad siit.

1. Kasutamine PyCharmi graafilise liidese kaudu:

  • Avage PyCharmis oma projekt ja minge Git branch menüüsse all vasakul. Seal valides ühe haru, näiteks main, saate näha selle haru commit'ide ajalugu.

  • Paremklõpsake commit'il, millele soovite reset'i teha, ja valige Reset Current Branch to Here....

  • Avaneb dialoogiaken, kus peate valima reset'i tüübi:
    • Soft: Säilitab muudatused tööpuus (staged), kuid eemaldab need commit'idest.

    • Mixed: Säilitab muudatused tööpuus, kuid unstaged (muudatused jäävad, kuid neid ei ole ette valmistatud commit'iks).

    • Hard: Eemaldab kõik muudatused täielikult, nagu neid poleks kunagi tehtud.

    • Keep: Eemaldab commit'id, kuid säilitab kõik muudatused tööpuus, tingimusel, et need ei põhjusta konflikte. Kui failides on konflikte, reset peatub ja annab vea. See on sarnane mixed reset'iga, kuid jätab alles need muudatused, mis pole hetkel jälgimisel (git add), ilma nendega seotud faile muutmata.

  • Valige soovitud reset'i tüüp ja vajutage Reset.

2. Kasutamine terminali kaudu:

  • Vaata commit'i ajalugu:

git log --oneline
  • Tee reset soovitud commit'ile:

git reset --hard [commit-hash]
  • Asenda [commit-hash] commit'i identifikaatoriga. Näiteks:

git reset --hard a1b2c3d
  • NB! --hard eemaldab ka kõik commit'imata muudatused tööpuust. Kui soovid säilitada tööpuu muudatused, kasuta --soft või --mixed.

Praktiline ülesanne git revert kohta

Projekt, millega ülesandeid lahendada: https://gitlab.cs.ttu.ee/iti0105-2024/git-workshop

Juhised projekti kloonimiseks/forkimiseks leiad siit.

Kasutamine PyCharmi graafilise liidese kaudu:

  • Minge Git branch menüüsse ning leidke jälle commit'ide ajalugu.

  • Paremklõpsake commit'il, mille soovite tagasi võtta, ja valige Revert Commit.

  • PyCharm loob uue commit'i, mis tühistab valitud commit'i muudatused. See commit lisatakse automaatselt ajaloosse ja seda saab push'ida kaugserverisse.

Kasutamine terminali kaudu:

  • Vaata commit'i ajalugu:

git log --oneline
  • Revert'i konkreetne commit:

git revert [commit-hash]

Kasutatud materjalid