Začneme přidáním několika souborů. Při posledním odevzdání budeme přidávat a mazat soubory, abychom vytvořili chaotickou situaci. Pak se vrátíme zpět do stavu před chaosem.
Můžete vytvořit složku nazvanou / test a spustit následující příkazy pro inicializaci Git a vytvoření výše popsané situace (záměrně provádíme samostatné závazky k vytvoření historie):
$ git initInicializované prázdné úložiště Git v / Users / zakh_eecs / _work / LearnGIT / git_revert / test /.git /
$ echo x> soubor_1.txt
$ git přidat -A
$ git commit -m "Přidávání souboru_1.txt "
[master (root-commit) 08caf5d] Přidávání souboru_1.txt
1 soubor změněn, 1 vložení (+)
vytvořit režim 100644 file_1.txt
$ echo y> soubor_2.txt
$ git přidat -A
$ git commit -m "Přidávání souboru_2.txt "
[master ba18a2f] Přidávání souboru_2.txt
1 soubor změněn, 1 vložení (+)
vytvořit režim 100644 file_2.txt
$ echo z> soubor_3.txt
$ git přidat -A
$ git commit -m "Přidávání souboru_3.txt "
[master 97f09ad] Přidávání souboru_3.txt
1 soubor změněn, 1 vložení (+)
vytvořit režim 100644 file_3.txt
$ echo u> soubor_4.txt
$ git přidat -A
$ git commit -m "Přidávání souboru_4.txt "
[master 9caf084] Přidávání souboru_4.txt
1 soubor změněn, 1 vložení (+)
vytvořte režim 100644 file_4.txt
$ echo v> soubor_5.txt
$ git přidat -A
$ git commit -m "Přidávání souboru_5.txt "
[master 3f228b2] Přidávání souboru_5.txt
1 soubor změněn, 1 vložení (+)
vytvořte režim 100644 file_5.txt
Pokud zkontrolujeme naši složku, měli bychom vidět následující situaci:
$ ls -1file_1.txt
file_2.txt
file_3.txt
file_4.txt
file_5.txt
Pokud zkontrolujeme historii, měli bychom mít následující soubory:
$ git log - online3f228b2 Přidání souboru_5.txt
9caf084 Přidávání souboru_4.txt
97f09ad Přidávání souboru_3.txt
ba18a2f Přidávání souboru_2.txt
08caf5d Přidávání souboru_1.txt
Nyní pojďme vytvořit zmatek, odstraníme několik souborů a přidáme špatný soubor.
$ rm soubor_2.txt$ rm soubor_4.txt
$ echo w> my_bad_file.txt
$ git přidat -A
$ git commit -m "Přidané a odstraněné soubory bez přemýšlení o důsledcích"
[master 879fbf8] Přidané a odstraněné soubory bez přemýšlení o důsledcích
3 soubory změněny, 1 vložení (+), 2 odstranění (-)
režim mazání 100644 file_2.txt
režim mazání 100644 file_4.txt
vytvořit režim 100644 my_bad_file.txt
Nyní je to podmínka naší složky:
$ ls -1file_1.txt
file_3.txt
file_5.txt
my_bad_file.txt
A toto je stav naší historie:
$ git log - online879fbf8 Přidané a odstraněné soubory bez přemýšlení o důsledcích
3f228b2 Přidání souboru_5.txt
9caf084 Přidávání souboru_4.txt
97f09ad Přidávání souboru_3.txt
ba18a2f Přidávání souboru_2.txt
08caf5d Přidávání souboru_1.txt
Uvědomujeme si, že nechceme poslední potvrzení 879fbf8. Takže použijeme následující příkaz revert:
$ git vrátit 879fbf8Otevře se textové okno pro úpravu automatického komentáře:
Vrátit zpět „Přidané a odstraněné soubory bez přemýšlení o důsledcích“Tím se vrátí spáchání 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Zadejte prosím zprávu o potvrzení změn. Řádky začínají
# s '#' bude ignorováno a prázdná zpráva zruší potvrzení.
# Na pobočce
# Provedené změny:
# Nový soubor: file_2.txt
# Nový soubor: file_4.txt
# Odstraněno: my_bad_file.txt
#
Komentář můžete upravit. Budeme to udržovat tak, jak to je. Jakmile okno s komentářem uložíte, proběhne úloha vrácení:
$ git vrátit 879fbf8[master 6e80f0e] Vrátit „Přidané a odstraněné soubory bez přemýšlení o důsledcích“
3 soubory změněny, 2 vložení (+), 1 smazání (-)
vytvořit režim 100644 file_2.txt
vytvořte režim 100644 file_4.txt
režim mazání 100644 my_bad_file.txt
Podívejme se nyní na naši složku:
$ ls -1file_1.txt
file_2.txt
file_3.txt
file_4.txt
file_5.txt
Naše soubory jsou zpět v pořadí jako předtím. Všechny doplňky a odstranění byly vráceny. Pojďme zkontrolovat protokol:
$ git log - online6e80f0e Revert "Přidané a odstraněné soubory bez přemýšlení o důsledcích"
879fbf8 Přidané a odstraněné soubory bez přemýšlení o důsledcích
3f228b2 Přidání souboru_5.txt
9caf084 Přidávání souboru_4.txt
97f09ad Přidávání souboru_3.txt
ba18a2f Přidávání souboru_2.txt
08caf5d Přidávání souboru_1.txt
Je tu nový závazek 6e80f0e. Jakékoli změny, které byly součástí 879fbf8 byl vrácen a poté spáchán 6e80f0e.
Varování: Příkaz Git reset vám také umožňuje vrátit zpět závazky. Ale v případě resetování (zejména tvrdý reset) by to odstranilo 879fbf8 spáchat, jako by se to nikdy nestalo, a nebylo by 6e80f0e spáchat. S příkazem reverz může každý vidět změny, ke kterým došlo. V případě resetu nezůstane žádná stopa. Takže je špatný nápad použít příkaz reset ve veřejném úložišti, protože to může způsobit masový zmatek. Zlaté pravidlo zní - nepoužívejte reset ve veřejných úložištích, použijte návrat, který je bezpečnější.
Závěrem:
Příkaz Git revert je rychlý a pohodlný způsob, jak napravit své chyby. Je to příkaz, který byste si měli pamatovat, pokud pravidelně pracujete s Gitem.
Další studie:
- https: // git-scm.com / docs / git-revert
- https: // git-scm.com / docs / git-reset
- Git: Naučte se ovládání verzí pomocí Git: Podrobný průvodce pro začátečníky
- Řízení verzí pomocí Gitu: Výkonné nástroje a techniky pro vývoj softwaru pro spolupráci
- Pro Git, 2. vydání