Začeli bomo z dodajanjem nekaj datotek. Ob zadnji objavi bomo dodali in izbrisali datoteke, da bomo ustvarili neurejeno situacijo. Potem se bomo vrnili v stanje pred kaosom.
Ustvarite lahko mapo z imenom / test in zaženete naslednje ukaze, da inicializirate Git in ustvarite zgoraj opisano situacijo (namenoma ustvarjamo ločene zaveze za ustvarjanje zgodovine):
$ git initInicializirano prazno repozitorij Git v / Users / zakh_eecs / _work / LearnGIT / git_revert / test /.git /
$ echo x> file_1.txt
$ git add -A
$ git commit -m "Dodajanje datoteke_1.txt "
[master (root-commit) 08caf5d] Dodajanje datoteke_1.txt
1 datoteka spremenjena, 1 vstavitev (+)
ustvari način 100644 file_1.txt
$ echo y> datoteka_2.txt
$ git add -A
$ git commit -m "Dodajanje datoteke_2.txt "
[master ba18a2f] Dodajanje datoteke_2.txt
1 datoteka spremenjena, 1 vstavitev (+)
ustvari način 100644 file_2.txt
$ echo z> datoteka_3.txt
$ git add -A
$ git commit -m "Dodajanje datoteke_3.txt "
[master 97f09ad] Dodajanje datoteke_3.txt
1 datoteka spremenjena, 1 vstavitev (+)
ustvari način 100644 file_3.txt
$ echo u> datoteka_4.txt
$ git add -A
$ git commit -m "Dodajanje datoteke_4.txt "
[master 9caf084] Dodajanje datoteke_4.txt
1 datoteka spremenjena, 1 vstavitev (+)
ustvari način 100644 file_4.txt
$ echo v> datoteka_5.txt
$ git add -A
$ git commit -m "Dodajanje datoteke_5.txt "
[master 3f228b2] Dodajanje datoteke_5.txt
1 datoteka spremenjena, 1 vstavitev (+)
ustvari način 100644 file_5.txt
Če preverimo svojo mapo, bi morali videti naslednje:
$ ls -1datoteka_1.txt
datoteka_2.txt
datoteka_3.txt
datoteka_4.txt
datoteka_5.txt
Če preverimo zgodovino, bi morali imeti naslednje datoteke:
$ git log --oneline3f228b2 Dodajanje datoteke_5.txt
9caf084 Dodajanje datoteke_4.txt
97f09ad Dodajanje datoteke_3.txt
ba18a2f Dodajanje datoteke_2.txt
08caf5d Dodajanje datoteke_1.txt
Zdaj pa ustvarimo nekaj opustošenja, izbrisali bomo nekaj datotek in dodali slabo datoteko.
$ rm datoteka_2.txt$ rm datoteka_4.txt
$ echo w> my_bad_file.txt
$ git add -A
$ git commit -m "Dodane in izbrisane datoteke brez razmišljanja o posledicah"
[mojster 879fbf8] Dodane in izbrisane datoteke brez razmišljanja o posledicah
3 datoteke spremenjene, 1 vstavljanje (+), 2 brisanja (-)
način brisanja 100644 file_2.txt
način brisanja 100644 file_4.txt
ustvari način 100644 my_bad_file.txt
To je pogoj naše mape:
$ ls -1datoteka_1.txt
datoteka_3.txt
datoteka_5.txt
my_bad_file.txt
In to je pogoj naše zgodovine:
$ git log --oneline879fbf8 Dodane in izbrisane datoteke brez razmišljanja o posledicah
3f228b2 Dodajanje datoteke_5.txt
9caf084 Dodajanje datoteke_4.txt
97f09ad Dodajanje datoteke_3.txt
ba18a2f Dodajanje datoteke_2.txt
08caf5d Dodajanje datoteke_1.txt
Zavedamo se, da nočemo zadnje odobritve 879fbf8. Torej uporabimo naslednji ukaz za vrnitev:
$ git revert 879fbf8Odprlo se bo besedilno okno za urejanje samodejnega komentarja:
Razveljavi "Dodane in izbrisane datoteke brez razmišljanja o posledicah"To razveljavi odobritev 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Prosimo, vnesite sporočilo za prevzem sprememb. Proge se začnejo
# z '#' bo prezrt, prazno sporočilo pa prekine objavo.
# Na poveljniku podružnice
# Spremenjene spremembe:
# Nova datoteka: datoteka_2.txt
# Nova datoteka: datoteka_4.txt
# Izbrisano: my_bad_file.txt
#
Komentar lahko spremenite. Tako bomo ohranili. Takoj ko shranite okno za komentar, bo izvedena naloga za povrnitev:
$ git revert 879fbf8[master 6e80f0e] Razveljavi "Dodane in izbrisane datoteke brez razmišljanja o posledicah"
3 datoteke spremenjene, 2 vstavki (+), 1 brisanje (-)
ustvari način 100644 file_2.txt
ustvari način 100644 file_4.txt
način brisanja 100644 my_bad_file.txt
Poglejmo si zdaj našo mapo:
$ ls -1datoteka_1.txt
datoteka_2.txt
datoteka_3.txt
datoteka_4.txt
datoteka_5.txt
Naše datoteke se vrnejo v zaporedju kot prej. Vsi dodatki in izbrisi so bili povrnjeni. Preverimo dnevnik:
$ git log --oneline6e80f0e Razveljavi "Dodane in izbrisane datoteke brez razmišljanja o posledicah"
879fbf8 Dodane in izbrisane datoteke brez razmišljanja o posledicah
3f228b2 Dodajanje datoteke_5.txt
9caf084 Dodajanje datoteke_4.txt
97f09ad Dodajanje datoteke_3.txt
ba18a2f Dodajanje datoteke_2.txt
08caf5d Dodajanje datoteke_1.txt
Prišlo je do nove zaveze 6e80f0e. Vse spremembe, ki so bile del 879fbf8 je bila razveljavljena in nato storjena v 6e80f0e.
Opozorilo: Ukaz Git reset vam omogoča, da razveljavite tudi zaveze. Toda v primeru ponastavitve (zlasti pri trdi ponastavitvi) bi izbrisal 879fbf8 zavezati, kot da se ni nikoli zgodilo in ne bi bilo 6e80f0e zavezati. Z ukazom za vrnitev lahko vsi vidijo spremembe, ki so se zgodile. V primeru ponastavitve ni ostalo nobene sledi. Torej je slabo uporabiti ukaz za ponastavitev v javnem repozitoriju, ker lahko povzroči množično zmedo. Zlato pravilo je - ne uporabljajte ponastavitve v javnih skladiščih, uporabite razveljavitev, ki je varnejša.
V zaključku:
Ukaz Git revert je hiter in priročen način za odpravo napak. To je ukaz, ki si ga morate zapomniti, če redno delate z Gitom.
Nadaljni študij:
- https: // git-scm.com / docs / git-revert
- https: // git-scm.com / docs / git-reset
- Git: Naučite se nadziranja različic z Git: Uvod za začetnike po korakih
- Nadzor različic z Git: zmogljiva orodja in tehnike za skupni razvoj programske opreme
- Pro Git, 2. izdaja