Ще започнем с добавяне на няколко файла. При последния коммит ще добавяме и изтриваме файлове, за да създадем объркана ситуация. Тогава ще се върнем към състоянието преди хаоса.
Можете да създадете папка с име / test и да изпълните следните команди, за да инициализирате Git и да създадете ситуацията, описана по-горе (Умишлено правим отделни фиксирания, за да създадем история):
$ git initИнициализирано празно хранилище Git в / Users / zakh_eecs / _work / LearnGIT / git_revert / test /.git /
$ echo x> file_1.текст
$ git add -A
$ git commit -m "Добавяне на файл_1.текст"
[master (root-commit) 08caf5d] Добавяне на файл_1.текст
1 файл е променен, 1 вмъкване (+)
създайте режим 100644 файл_1.текст
$ echo y> file_2.текст
$ git add -A
$ git commit -m "Добавяне на файл_2.текст"
[master ba18a2f] Добавяне на файл_2.текст
1 файл е променен, 1 вмъкване (+)
създайте режим 100644 файл_2.текст
$ echo z> файл_3.текст
$ git add -A
$ git commit -m "Добавяне на файл_3.текст"
[master 97f09ad] Добавяне на файл_3.текст
1 файл е променен, 1 вмъкване (+)
създайте режим 100644 файл_3.текст
$ echo u> file_4.текст
$ git add -A
$ git commit -m "Добавяне на файл_4.текст"
[master 9caf084] Добавяне на файл_4.текст
1 файл е променен, 1 вмъкване (+)
създайте режим 100644 файл_4.текст
$ echo v> file_5.текст
$ git add -A
$ git commit -m "Добавяне на файл_5.текст"
[master 3f228b2] Добавяне на файл_5.текст
1 файл е променен, 1 вмъкване (+)
създайте режим 100644 файл_5.текст
Ако проверим нашата папка, трябва да видим следната ситуация:
$ ls -1файл_1.текст
файл_2.текст
файл_3.текст
файл_4.текст
файл_5.текст
Ако проверим историята, трябва да имаме следните файлове:
$ git log --oneline3f228b2 Добавяне на файл_5.текст
9caf084 Добавяне на файл_4.текст
97f09ad Добавяне на файл_3.текст
ba18a2f Добавяне на файл_2.текст
08caf5d Добавяне на файл_1.текст
Сега нека създадем хаос, ще изтрием няколко файла и ще добавим лош файл.
$ rm файл_2.текст$ rm файл_4.текст
$ echo w> my_bad_file.текст
$ git add -A
$ git commit -m "Добавени и изтрити файлове, без да се мисли за последствия"
[master 879fbf8] Добавени и изтрити файлове, без да се мисли за последствия
3 файла променени, 1 вмъкване (+), 2 изтривания (-)
режим на изтриване 100644 файл_2.текст
режим на изтриване 100644 файл_4.текст
режим на създаване 100644 my_bad_file.текст
Това е условието на нашата папка:
$ ls -1файл_1.текст
файл_3.текст
файл_5.текст
my_bad_file.текст
И това е условието на нашата история:
$ git log --oneline879fbf8 Добавени и изтрити файлове, без да се мисли за последствия
3f228b2 Добавяне на файл_5.текст
9caf084 Добавяне на файл_4.текст
97f09ad Добавяне на файл_3.текст
ba18a2f Добавяне на файл_2.текст
08caf5d Добавяне на файл_1.текст
Осъзнаваме, че не искаме последния коммит 879fbf8. Затова използваме следната команда за връщане:
$ git върне 879fbf8Това ще отвори текстов прозорец за редактиране на автоматичния коментар:
Върнете "Добавени и изтрити файлове, без да мислите за последствия"Това връща ангажиране 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Моля, въведете съобщението за ангажиране за вашите промени. Стартиране на линии
# с '#' ще бъде игнорирано и празното съобщение прекъсва фиксирането.
# На главния клон
# Промени, които трябва да бъдат извършени:
# Нов файл: файл_2.текст
# Нов файл: файл_4.текст
# Изтрит: my_bad_file.текст
#
Можете да модифицирате коментара. Ще го запазим такъв, какъвто е. Веднага щом запазите прозореца за коментар, ще се извърши задачата за връщане:
$ git върне 879fbf8[master 6e80f0e] Върнете „Добавени и изтрити файлове, без да мислите за последствия“
3 файла променени, 2 вмъквания (+), 1 изтриване (-)
създайте режим 100644 файл_2.текст
създайте режим 100644 файл_4.текст
режим на изтриване 100644 my_bad_file.текст
Нека да разгледаме нашата папка сега:
$ ls -1файл_1.текст
файл_2.текст
файл_3.текст
файл_4.текст
файл_5.текст
Нашите файлове се връщат в последователност, както преди. Всички добавки и изтривания са върнати. Нека проверим дневника:
$ git log --oneline6e80f0e Връщане "Добавени и изтрити файлове, без да се мисли за последствия"
879fbf8 Добавени и изтрити файлове, без да се мисли за последствия
3f228b2 Добавяне на файл_5.текст
9caf084 Добавяне на файл_4.текст
97f09ad Добавяне на файл_3.текст
ba18a2f Добавяне на файл_2.текст
08caf5d Добавяне на файл_1.текст
Има нов ангажимент 6e80f0e. Всички промени, които бяха част от 879fbf8 беше отменено и след това извършено през 6e80f0e.
Внимание: Командата Git reset ви позволява да отмените и ангажиранията. Но в случая на нулиране (особено хардуерно нулиране) той би изтрил 879fbf8 ангажирайте така, както никога не се е случило и нямаше да има 6e80f0e ангажирам. С команда за връщане всеки може да види настъпилите промени. В случая на нулиране не е останала следа. Така че е лоша идея да използвате команда за нулиране в публично хранилище, защото това може да доведе до масово объркване. Златното правило е - не използвайте нулиране в публични хранилища, използвайте връщане, което е по-безопасно.
В заключение:
Командата Git revert е бърз и удобен начин за отстраняване на грешките ви. Това е команда, която трябва да запомните, ако работите редовно с Git.
Допълнително проучване:
- https: // git-scm.com / docs / git-revert
- https: // git-scm.com / docs / git-reset
- Git: Научете контрол на версиите с Git: Ръководство за начинаещи стъпка по стъпка
- Контрол на версиите с Git: Мощни инструменти и техники за съвместно разработване на софтуер
- Pro Git, 2-ро издание