Krenut ćemo s dodavanjem nekoliko datoteka. Pri posljednjem urezivanju dodavat ćemo i brisati datoteke kako bismo stvorili neurednu situaciju. Tada ćemo se vratiti u stanje prije kaosa.
Možete stvoriti mapu koja se zove / test i pokrenuti sljedeće naredbe za inicijalizaciju Gita i stvaranje gore opisane situacije (Namjerno radimo odvojene predaje kako bismo stvorili povijest):
$ git initInicijalizirano prazno Git spremište u / Users / zakh_eecs / _work / LearnGIT / git_revert / test /.git /
$ echo x> datoteka_1.txt
$ git dodaj -A
$ git commit -m "Dodavanje datoteke_1.txt "
[master (root-commit) 08caf5d] Dodavanje datoteke_1.txt
1 datoteka promijenjena, 1 umetanje (+)
način stvaranja 100644 datoteka_1.txt
$ echo y> file_2.txt
$ git dodaj -A
$ git commit -m "Dodavanje datoteke_2.txt "
[master ba18a2f] Dodavanje datoteke_2.txt
1 datoteka promijenjena, 1 umetanje (+)
način stvaranja 100644 datoteka_2.txt
$ echo z> datoteka_3.txt
$ git dodaj -A
$ git commit -m "Dodavanje datoteke_3.txt "
[master 97f09ad] Dodavanje datoteke_3.txt
1 datoteka promijenjena, 1 umetanje (+)
stvoriti način rada 100644 file_3.txt
$ echo u> datoteka_4.txt
$ git dodaj -A
$ git commit -m "Dodavanje datoteke_4.txt "
[master 9caf084] Dodavanje datoteke_4.txt
1 datoteka promijenjena, 1 umetanje (+)
način stvaranja 100644 datoteka_4.txt
$ echo v> datoteka_5.txt
$ git dodaj -A
$ git commit -m "Dodavanje datoteke_5.txt "
[master 3f228b2] Dodavanje datoteke_5.txt
1 datoteka promijenjena, 1 umetanje (+)
način stvaranja 100644 datoteka_5.txt
Ako provjerimo našu mapu, trebali bismo vidjeti sljedeću situaciju:
$ ls -1datoteka_1.txt
datoteka_2.txt
datoteka_3.txt
datoteka_4.txt
datoteka_5.txt
Ako provjerimo povijest, trebali bismo imati sljedeće datoteke:
$ git log --oneline3f228b2 Dodavanje datoteke_5.txt
9caf084 Dodavanje datoteke_4.txt
97f09ad Dodavanje datoteke_3.txt
ba18a2f Dodavanje datoteke_2.txt
08caf5d Dodavanje datoteke_1.txt
Ajmo sada stvoriti pustoš, izbrisat ćemo nekoliko datoteka i dodati lošu datoteku.
$ rm datoteka_2.txt$ rm datoteka_4.txt
$ echo w> my_bad_file.txt
$ git dodaj -A
$ git commit -m "Dodane i obrisane datoteke bez razmišljanja o posljedicama"
[master 879fbf8] Dodane i izbrisane datoteke bez razmišljanja o posljedicama
Promijenjene su 3 datoteke, 1 umetanje (+), 2 brisanja (-)
način brisanja 100644 datoteka_2.txt
način brisanja 100644 datoteka_4.txt
način stvaranja 100644 my_bad_file.txt
Ovo je uvjet naše mape:
$ ls -1datoteka_1.txt
datoteka_3.txt
datoteka_5.txt
my_bad_file.txt
I ovo je stanje naše povijesti:
$ git log --oneline879fbf8 Dodane i izbrisane datoteke bez razmišljanja o posljedicama
3f228b2 Dodavanje datoteke_5.txt
9caf084 Dodavanje datoteke_4.txt
97f09ad Dodavanje datoteke_3.txt
ba18a2f Dodavanje datoteke_2.txt
08caf5d Dodavanje datoteke_1.txt
Shvaćamo da ne želimo posljednje urezivanje 879fbf8. Dakle, koristimo sljedeću naredbu revert:
$ git revert 879fbf8Otvorit će se tekstualni prozor za uređivanje automatskog komentara:
Vrati "Dodane i izbrisane datoteke bez razmišljanja o posljedicama"Ovo poništava urezivanje 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Unesite poruku urezivanja za vaše promjene. Linije počinju
# s '#' bit će zanemaren, a prazna poruka prekida urezivanje.
# Na masteru grane
# Izmjene koje treba izvršiti:
# Nova datoteka: datoteka_2.txt
# Nova datoteka: datoteka_4.txt
# Izbrisano: my_bad_file.txt
#
Možete izmijeniti komentar. Zadržat ćemo ga onakvim kakav je. Čim spremite prozor komentara, izvršit će se zadatak vraćanja:
$ git revert 879fbf8[master 6e80f0e] Vrati "Dodane i izbrisane datoteke bez razmišljanja o posljedicama"
Promijenjene su 3 datoteke, 2 umetanja (+), 1 brisanje (-)
način stvaranja 100644 datoteka_2.txt
način stvaranja 100644 datoteka_4.txt
način brisanja 100644 my_bad_file.txt
Pogledajmo sada našu mapu:
$ ls -1datoteka_1.txt
datoteka_2.txt
datoteka_3.txt
datoteka_4.txt
datoteka_5.txt
Naše se datoteke vraćaju u nizu kao i prije. Vraćeni su svi dodaci i brisanja. Provjerimo zapisnik:
$ git log --oneline6e80f0e Vrati "Dodane i izbrisane datoteke bez razmišljanja o posljedicama"
879fbf8 Dodane i izbrisane datoteke bez razmišljanja o posljedicama
3f228b2 Dodavanje datoteke_5.txt
9caf084 Dodavanje datoteke_4.txt
97f09ad Dodavanje datoteke_3.txt
ba18a2f Dodavanje datoteke_2.txt
08caf5d Dodavanje datoteke_1.txt
Novi je polog 6e80f0e. Sve promjene koje su bile dio 879fbf8 je poništeno, a zatim počinjeno u 6e80f0e.
Upozorenje: Naredba Git reset omogućuje vam poništavanje i urezivanja. Ali u slučaju resetiranja (posebno hard reset), izbrisao bi 879fbf8 počiniti kao da se nikad nije dogodilo i ne bi bilo 6e80f0e počiniti. Pomoću naredbe za vraćanje svi mogu vidjeti promjene koje su se dogodile. U slučaju resetiranja nije ostao trag. Stoga je loša ideja koristiti naredbu reset u javnom spremištu jer to može izazvati masovnu zabunu. Zlatno je pravilo - nemojte koristiti reset u javnim spremištima, koristite revert koji je sigurniji.
U zaključku:
Naredba Git revert je brz i prikladan način da ispravite svoje pogreške. To je naredba koju biste se trebali sjetiti ako redovito radite s Gitom.
Daljni studiji:
- https: // git-scm.com / docs / git-revert
- https: // git-scm.com / docs / git-reset
- Git: Saznajte kako upravljati verzijama s Git-om: Vodič za početnike korak po korak
- Kontrola verzija s Gitom: Moćni alati i tehnike za zajednički razvoj softvera
- Pro Git, drugo izdanje