Git

Kaip grąžinti paskutinį įsipareigojimą?

Kaip grąžinti paskutinį įsipareigojimą?
„Git“ yra efektyvus įrankis, kuris seka jūsų kodą. Viena iš puikių įrankio savybių yra ta, kad galite lengvai patikrinti savo istoriją ir grįžti atgal, jei suklydote. Sukurkime situaciją, kai galite atšaukti paskutinį įsipareigojimą ir pamatyti, kaip veikia „Git revert“ komanda.

Pradėsime nuo kelių failų pridėjimo. Atlikdami paskutinį įsipareigojimą, mes pridėsime ir ištrinsime failus, kad sukurtume netvarkingą situaciją. Tada mes grįšime į būseną prieš chaosą.

Galite sukurti aplanką pavadinimu / test ir paleisti šias komandas, kad inicijuotumėte „Git“ ir sukurtumėte aukščiau aprašytą situaciją (Mes sąmoningai darome atskirus įsipareigojimus, kad sukurtume istoriją):

$ git init
Inicijuota tuščia „Git“ saugykla aplanke / Vartotojai / zakh_eecs / _work / LearnGIT / git_revert / test /.git /
$ echo x> file_1.txt
$ git pridėti -A
$ git įsipareigoti -m "Pridedamas failas_1.txt "
[pagrindinis (root-įsipareigoti) 08caf5d] Pridedamas failas_1.txt
1 failas pakeistas, 1 įterpimas (+)
sukurti režimą 100644 file_1.txt
$ echo y> file_2.txt
$ git pridėti -A
$ git įsipareigoti -m "Pridedamas failas_2.txt "
[master ba18a2f] Pridedamas failas_2.txt
1 failas pakeistas, 1 įterpimas (+)
sukurti režimą 100644 file_2.txt
$ echo z> file_3.txt
$ git pridėti -A
$ git įsipareigoti -m "Pridedamas failas_3.txt "
[master 97f09ad] Pridedamas failas_3.txt
1 failas pakeistas, 1 įterpimas (+)
sukurti režimą 100644 file_3.txt
$ echo u> failas_4.txt
$ git pridėti -A
$ git įsipareigoti -m "Pridėti failą_4.txt "
[master 9caf084] Pridedamas failas_4.txt
1 failas pakeistas, 1 įterpimas (+)
sukurti režimą 100644 file_4.txt
$ echo v> file_5.txt
$ git pridėti -A
$ git įsipareigoti -m "Pridedamas failas_5.txt "
[master 3f228b2] Pridedamas failas_5.txt
1 failas pakeistas, 1 įterpimas (+)
sukurti režimą 100644 file_5.txt

Jei patikrinsime aplanką, turėtume pamatyti tokią situaciją:

$ ls -1
failas_1.txt
file_2.txt
file_3.txt
failas_4.txt
file_5.txt

Jei patikrinsime istoriją, turėtume turėti šiuos failus:

$ git žurnalas - tiesioginis
3f228b2 Pridedamas failas_5.txt
9caf084 Pridedamas failas_4.txt
97f09ad Pridedamas failas_3.txt
ba18a2f Pridedamas failas_2.txt
08caf5d Pridedamas failas_1.txt

Dabar sukursime tam tikrą sumaištį, mes ištrinsime keletą failų ir pridėsime blogą failą.

$ rm failas_2.txt
$ rm failas_4.txt
$ echo w> my_bad_file.txt
$ git pridėti -A
$ git įsipareigoti -m "Pridėti ir ištrinti failai negalvojant apie pasekmes"
[master 879fbf8] Pridėjo ir ištrynė failus negalvodamas apie pasekmes
Pakeisti 3 failai, 1 įterpimas (+), 2 ištrynimas (-)
ištrinti režimą 100644 file_2.txt
ištrinti režimą 100644 file_4.txt
sukurti režimą 100644 my_bad_file.txt

Tai yra mūsų aplanko sąlyga:

$ ls -1
failas_1.txt
file_3.txt
failas_5.txt
my_bad_file.txt

Tai yra mūsų istorijos sąlyga:

$ git žurnalas - tiesioginis
879fbf8 Pridėjo ir pašalino failus negalvodami apie pasekmes
3f228b2 Pridedamas failas_5.txt
9caf084 Pridedamas failas_4.txt
97f09ad Pridedamas failas_3.txt
ba18a2f Pridedamas failas_2.txt
08caf5d Pridedamas failas_1.txt

Suprantame, kad nenorime paskutinio įsipareigojimo 879fbf8. Taigi mes naudojame šią komandą grįžti:

$ git revert 879fbf8

Bus atidarytas teksto langas, skirtas redaguoti automatinį komentarą:

Grąžinti „Pridėtus ir ištrintus failus negalvojant apie pasekmes“
 
Tai grąžina įsipareigojimą 879fbf849c4bd6fb9a377604d6355c76b92a832c.
 
# Įveskite patvirtinimo pranešimą, kad atliktumėte pakeitimus. Prasideda linijos
# su „#“ bus ignoruojamas, o tuščias pranešimas nutraukia įsipareigojimą.
# Filialo kapitonas
# Pakeitimai, kuriuos reikia atlikti:
# Naujas failas: file_2.txt
# Naujas failas: file_4.txt
# Ištrinta: my_bad_file.txt
#

Galite modifikuoti komentarą. Mes ketiname išlaikyti tai, kaip yra. Kai tik išsaugosite komentaro langą, bus atlikta grąžinimo užduotis:

$ git revert 879fbf8
[master 6e80f0e] Grąžinti „Pridėti ir ištrinti failai negalvojant apie pasekmes“
Pakeisti 3 failai, 2 įterpimai (+), 1 ištrinti (-)
sukurti režimą 100644 file_2.txt
sukurti režimą 100644 file_4.txt
ištrinti režimą 100644 my_bad_file.txt

Pažvelkime į mūsų aplanką dabar:

$ ls -1
failas_1.txt
file_2.txt
file_3.txt
failas_4.txt
file_5.txt

Mūsų failai vėl seka kaip ir anksčiau. Visi papildymai ir ištrynimai buvo panaikinti. Patikrinkime žurnalą:

$ git žurnalas - tiesioginis
 
6e80f0e Grąžinti „Pridėtus ir ištrintus failus negalvojant apie pasekmes“
879fbf8 Pridėjo ir pašalino failus negalvodami apie pasekmes
3f228b2 Pridedamas failas_5.txt
9caf084 Pridedamas failas_4.txt
97f09ad Pridedamas failas_3.txt
ba18a2f Pridedamas failas_2.txt
08caf5d Pridedamas failas_1.txt

Yra naujas įsipareigojimas 6e80f0e. Visi pakeitimai, kurie buvo dalis 879fbf8 buvo anuliuotas ir tada įvykdytas 6e80f0e.

Įspėjimas: „Git reset“ komanda taip pat leidžia anuliuoti įsipareigojimus. Bet iš naujo nustatymo atveju (ypač iš naujo nustatant „hard reset“), jis būtų ištrynęs 879fbf8 įsipareigoti taip, kaip niekada nebuvo ir nebūtų buvę 6e80f0e įsipareigoti. Naudodami komandą grąžinti, visi gali pamatyti įvykusius pakeitimus. Atstatymo atveju pėdsakų nelieka. Taigi bloga idėja naudoti atstatymo komandą viešojoje saugykloje, nes tai gali sukelti masinę painiavą. Auksinė taisyklė - nenaudokite atstatymo viešosiose saugyklose, naudokite saugesnį grąžinimą.

Apibendrinant:

„Git“ grąžinimo komanda yra greitas ir patogus būdas ištaisyti klaidas. Tai komanda, kurią turėtumėte prisiminti, jei reguliariai dirbate su „Git“.

Tolesnis tyrimas:

Kaip parodyti FPS skaitiklį „Linux“ žaidimuose
„Linux“ žaidimai gavo didelį postūmį, kai „Valve“ paskelbė „Linux“ palaikymą „Steam“ klientui ir jų žaidimams 2012 m. Nuo tada daugelis AAA ir indie ž...
Kaip atsisiųsti ir paleisti „Sid Meier Civilization VI“ sistemoje „Linux“
Įvadas į žaidimą „Civilization 6“ yra šiuolaikinė klasikinės koncepcijos, pristatytos „Age of Empires“ žaidimų serijoje, koncepcija. Idėja buvo gana p...
Kaip įdiegti ir žaisti „Doom“ sistemoje „Linux“
Įvadas į Doom „Doom“ serija atsirado 90-aisiais, išleidus originalų „Doom“. Tai buvo tiesioginis hitas, o nuo to laiko žaidimų serija gavo daugybę apd...