Začneme pridaním niekoľkých súborov. Pri poslednom potvrdení budeme pridávať aj mazať súbory, aby sme vytvorili nepríjemnú situáciu. Potom sa vrátime späť do stavu pred chaosom.
Môžete vytvoriť priečinok s názvom / test a spustením nasledujúcich príkazov inicializovať Git a vytvoriť situáciu opísanú vyššie (zámerne robíme samostatné záväzky na vytvorenie histórie):
$ git initInicializované prázdne úložisko Git v / Users / zakh_eecs / _work / LearnGIT / git_revert / test /.git /
$ echo x> súbor_1.TXT
$ git pridať -A
$ git commit -m "Pridávanie súboru_1.TXT"
[master (root-commit) 08caf5d] Pridávanie súboru_1.TXT
1 súbor zmenený, 1 vloženie (+)
režim vytvorenia 100644 file_1.TXT
$ echo y> súbor_2.TXT
$ git pridať -A
$ git commit -m "Pridávanie súboru_2.TXT"
[master ba18a2f] Pridávanie súboru_2.TXT
1 súbor zmenený, 1 vloženie (+)
vytvorte režim 100644 file_2.TXT
$ echo z> súbor_3.TXT
$ git pridať -A
$ git commit -m "Pridávanie súboru_3.TXT"
[master 97f09ad] Pridáva sa súbor_3.TXT
1 súbor zmenený, 1 vloženie (+)
režim vytvorenia 100644 file_3.TXT
$ echo u> súbor_4.TXT
$ git pridať -A
$ git commit -m "Pridávanie súboru_4.TXT"
[master 9caf084] Pridávanie súboru_4.TXT
1 súbor zmenený, 1 vloženie (+)
vytvorte režim 100644 file_4.TXT
$ echo v> súbor_5.TXT
$ git pridať -A
$ git commit -m "Pridávanie súboru_5.TXT"
[master 3f228b2] Pridávanie súboru_5.TXT
1 súbor zmenený, 1 vloženie (+)
vytvorte režim 100644 file_5.TXT
Ak skontrolujeme náš priečinok, mala by sa zobraziť nasledujúca situácia:
$ ls -1súbor_1.TXT
súbor_2.TXT
file_3.TXT
súbor_4.TXT
súbor_5.TXT
Ak skontrolujeme históriu, mali by sme mať nasledujúce súbory:
$ git log - online3f228b2 Pridávanie súboru_5.TXT
9caf084 Pridávanie súboru_4.TXT
97f09ad Pridávanie súboru_3.TXT
ba18a2f Pridávanie súboru_2.TXT
08caf5d Pridávanie súboru_1.TXT
Poďme teraz vytvoriť chaos, ideme vymazať niekoľko súborov a pridať zlý súbor.
$ rm súbor_2.TXT$ rm súbor_4.TXT
$ echo w> my_bad_file.TXT
$ git pridať -A
$ git commit -m "Pridané a odstránené súbory bez premýšľania o dôsledkoch"
[master 879fbf8] Pridané a odstránené súbory bez premýšľania o dôsledkoch
3 súbory zmenené, 1 vloženie (+), 2 odstránenia (-)
režim odstránenia 100644 file_2.TXT
režim mazania 100644 file_4.TXT
vytvoriť režim 100644 my_bad_file.TXT
Teraz je to podmienka nášho priečinka:
$ ls -1súbor_1.TXT
file_3.TXT
súbor_5.TXT
my_bad_file.TXT
A toto je stav našej histórie:
$ git log - online879fbf8 Pridané a odstránené súbory bez premýšľania o dôsledkoch
3f228b2 Pridávanie súboru_5.TXT
9caf084 Pridávanie súboru_4.TXT
97f09ad Pridávanie súboru_3.TXT
ba18a2f Pridávanie súboru_2.TXT
08caf5d Pridávanie súboru_1.TXT
Uvedomujeme si, že nechceme posledný záväzok 879fbf8. Používame teda nasledujúci príkaz revert:
$ git vráti 879fbf8Otvorí sa textové okno na úpravu automatického komentára:
Vrátiť zmeny „Pridané a odstránené súbory bez premýšľania o dôsledkoch“Týmto sa vráti potvrdenie 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Zadajte správu o potvrdení zmien. Začínajú sa riadky
# s '#' bude ignorované a prázdna správa preruší potvrdenie.
# Na majstra pobočky
# Zmeny, ktoré je potrebné vykonať:
# Nový súbor: file_2.TXT
# Nový súbor: file_4.TXT
# Odstránené: my_bad_file.TXT
#
Komentár môžete upraviť. Budeme to držať tak, ako to je. Hneď ako uložíte okno s komentárom, dôjde k úlohe vrátenia:
$ git vráti 879fbf8[master 6e80f0e] Vrátiť „pridané a odstránené súbory bez premýšľania o dôsledkoch“
3 súbory zmenené, 2 vloženia (+), 1 odstránenie (-)
vytvorte režim 100644 file_2.TXT
vytvorte režim 100644 file_4.TXT
režim odstránenia 100644 my_bad_file.TXT
Pozrime sa teraz na náš priečinok:
$ ls -1súbor_1.TXT
súbor_2.TXT
file_3.TXT
súbor_4.TXT
súbor_5.TXT
Naše súbory sú späť v poradí ako predtým. Všetky dodatky a odstránenia boli vrátené späť. Poďme skontrolovať protokol:
$ git log - online6e80f0e Vrátiť „Pridané a odstránené súbory bez premýšľania o dôsledkoch“
879fbf8 Pridané a odstránené súbory bez premýšľania o dôsledkoch
3f228b2 Pridávanie súboru_5.TXT
9caf084 Pridávanie súboru_4.TXT
97f09ad Pridávanie súboru_3.TXT
ba18a2f Pridávanie súboru_2.TXT
08caf5d Pridávanie súboru_1.TXT
Je tu nový záväzok 6e80f0e. Akékoľvek zmeny, ktoré boli súčasťou 879fbf8 bol zrušený a potom spáchaný v 6e80f0e.
Pozor: Príkaz Git reset vám umožňuje vrátiť späť aj záväzky. Ale v prípade resetu (najmä tvrdý reset) by to vymazalo 879fbf8 spáchať, akoby sa to nikdy nestalo a nebolo by žiadneho 6e80f0e spáchať. Pomocou príkazu vrátiť späť môže každý vidieť zmeny, ktoré sa udiali. V prípade resetovania nezostane žiadna stopa. Nie je teda dobrý nápad používať príkaz reset vo verejnom úložisku, pretože to môže spôsobiť hromadný zmätok. Zlaté pravidlo je - nepoužívajte reset vo verejných úložiskách, používajte návrat, ktorý je bezpečnejší.
Na záver:
Príkaz Git revert je rýchly a pohodlný spôsob, ako napraviť svoje chyby. Je to príkaz, ktorý by ste si mali pamätať, ak pravidelne pracujete s Gitom.
Ďalšie štúdium:
- https: // git-scm.com / docs / git-revert
- https: // git-scm.com / docs / git-reset
- Git: Naučte sa správu verzií pomocou Gitu: Podrobný sprievodca pre začiatočníkov
- Správa verzií pomocou Gitu: Výkonné nástroje a techniky na vývoj softvéru pre spoluprácu
- Pro Git, 2. vydanie