Mēs sāksim ar dažu failu pievienošanu. Pēc pēdējās saistības mēs pievienosim un izdzēsīsim failus, lai izveidotu netīru situāciju. Tad mēs atgriezīsimies stāvoklī pirms haosa.
Jūs varat izveidot mapi ar nosaukumu / test un palaist šādas komandas, lai inicializētu Git un izveidotu iepriekš aprakstīto situāciju (Mēs apzināti veicam atsevišķas saistības, lai izveidotu vēsturi):
$ git initInicializēta tukša Git krātuve mapē / Lietotāji / zakh_eecs / _work / LearnGIT / git_revert / test /.git /
$ echo x> file_1.txt
$ git pievienot -A
$ git saistīt -m "Pievieno failu_1.txt "
[master (root-comm) 08caf5d] Faila pievienošana_1.txt
1 fails mainīts, 1 ievietots (+)
izveidot režīmu 100644 file_1.txt
$ echo y> file_2.txt
$ git pievienot -A
$ git saistīt -m "Pievieno failu_2.txt "
[master ba18a2f] Faila_2 pievienošana.txt
1 fails mainīts, 1 ievietots (+)
izveidot režīmu 100644 file_2.txt
$ echo z> file_3.txt
$ git pievienot -A
$ git saistīt -m "Pievieno failu_3.txt "
[master 97f09ad] Faila pievienošana_3.txt
1 fails mainīts, 1 ievietots (+)
izveidot režīmu 100644 file_3.txt
$ echo u> fails_4.txt
$ git pievienot -A
$ git saistīt -m "Faila pievienošana_4.txt "
[master 9caf084] Faila pievienošana_4.txt
1 fails mainīts, 1 ievietots (+)
izveidot režīmu 100644 file_4.txt
$ echo v> file_5.txt
$ git pievienot -A
$ git saistīt -m "Faila pievienošana_5.txt "
[master 3f228b2] Pievienojot failu_5.txt
1 fails mainīts, 1 ievietots (+)
izveidot režīmu 100644 file_5.txt
Pārbaudot mapi, mums vajadzētu redzēt šādu situāciju:
$ ls -1fails_1.txt
file_2.txt
fails_3.txt
fails_4.txt
fails_5.txt
Ja pārbaudām vēsturi, mums vajadzētu būt šādiem failiem:
$ git log - tiešsaistē3f228b2 Faila pievienošana_5.txt
9caf084 Faila pievienošana_4.txt
97f09ad Faila pievienošana_3.txt
ba18a2f Pievieno failu_2.txt
08caf5d Pievieno failu_1.txt
Tagad izveidosim zināmu postu, mēs izdzēsīsim dažus failus un pievienosim sliktu failu.
$ rm fails_2.txt$ rm fails_4.txt
$ echo w> my_bad_file.txt
$ git pievienot -A
$ git saistīt -m "Pievienoti un izdzēsti faili, nedomājot par sekām"
[master 879fbf8] Pievienoja un izdzēsa failus, nedomājot par sekām
Mainīti 3 faili, 1 ievietošana (+), 2 dzēšana (-)
dzēst režīmu 100644 file_2.txt
dzēšanas režīms 100644 file_4.txt
izveidot režīmu 100644 my_bad_file.txt
Tagad tas ir mūsu mapes nosacījums:
$ ls -1fails_1.txt
fails_3.txt
fails_5.txt
my_bad_file.txt
Un tas ir mūsu vēstures stāvoklis:
$ git log - tiešsaistē879fbf8 Pievienoti un izdzēsti faili, nedomājot par sekām
3f228b2 Faila pievienošana_5.txt
9caf084 Faila pievienošana_4.txt
97f09ad Faila pievienošana_3.txt
ba18a2f Pievieno failu_2.txt
08caf5d Pievieno failu_1.txt
Mēs saprotam, ka mēs nevēlamies, lai pēdējā izdarītu 879fbf8. Tāpēc mēs izmantojam šādu komandu revert:
$ git revert 879fbf8Tas atvērs teksta logu automātiskā komentāra rediģēšanai:
Atjaunot “Pievienotos un izdzēstos failus, nedomājot par sekām”Tas atgriež 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Lūdzu, ievadiet saistību ziņojumu par izmaiņām. Līnijas sākas
# ar '#' tiks ignorēts, un tukšs ziņojums pārtrauc apņemšanos.
# Uz filiāles kapteiņa
# Izpildāmās izmaiņas:
# Jauns fails: file_2.txt
# Jauns fails: fails_4.txt
# Izdzēsts: my_bad_file.txt
#
Jūs varat modificēt komentāru. Mēs to paturēsim tā, kā tas ir. Tiklīdz saglabājat komentāru logu, tiks veikts atjaunošanas uzdevums:
$ git revert 879fbf8[master 6e80f0e] Atjaunot "Pievienotos un izdzēstos failus, nedomājot par sekām"
Mainīti 3 faili, 2 ievietojumi (+), 1 dzēšana (-)
izveidot režīmu 100644 file_2.txt
izveidot režīmu 100644 file_4.txt
dzēst režīmu 100644 my_bad_file.txt
Apskatīsim mūsu mapi tūlīt:
$ ls -1fails_1.txt
file_2.txt
fails_3.txt
fails_4.txt
fails_5.txt
Mūsu faili ir atgriezušies tādā secībā kā iepriekš. Visi papildinājumi un svītrojumi ir atcelti. Pārbaudīsim žurnālu:
$ git log - tiešsaistē6e80f0e Atjaunot "Pievienotos un izdzēstos failus, nedomājot par sekām"
879fbf8 Pievienoti un izdzēsti faili, nedomājot par sekām
3f228b2 Faila pievienošana_5.txt
9caf084 Faila pievienošana_4.txt
97f09ad Faila pievienošana_3.txt
ba18a2f Pievieno failu_2.txt
08caf5d Pievieno failu_1.txt
Ir jauna saistība 6e80f0e. Visas izmaiņas, kas bija daļa no 879fbf8 tika atsaukts un pēc tam izdarīts 6e80f0e.
Brīdinājums: Git reset komanda ļauj atsaukt arī saistības. Bet atiestatīšanas gadījumā (īpaši cietajā atiestatīšanā) tas būtu izdzēsis 879fbf8 apņemties, kā tas nekad nav noticis, un nebūtu bijis 6e80f0e apņemties. Izmantojot komandu atgriezties, visi var redzēt notikušās izmaiņas. Atiestatīšanas gadījumā nav atstāta nekāda izsekošana. Tāpēc ir slikta ideja izmantot atiestatīšanas komandu publiskā repozitorijā, jo tas var izraisīt masu neskaidrības. Zelta likums ir - neizmantojiet atiestatīšanu publiskajos krātuvēs, izmantojiet drošāku atjaunošanu.
Noslēgumā:
Git revert komanda ir ātrs un ērts veids, kā novērst kļūdas. Tā ir komanda, kas jums jāatceras, ja regulāri strādājat ar Git.
Turpmāka izpēte:
- https: // git-scm.com / docs / git-revert
- https: // git-scm.com / docs / git-reset
- Git: apgūstiet versiju vadību, izmantojot Git: detalizēts ceļvedis iesācējiem
- Versiju kontrole ar Git: jaudīgi rīki un paņēmieni programmatūras kopīgai izstrādei
- Pro Git, 2. izdevums