Grąžinimas iš senojo „Git“ nustatymo viešajame repo

Kaip galiu grįžti prie konkretaus įsipareigojimo git?

Geriausias atsakymas, kurį kažkas galėtų man suteikti, yra naudoti „ git revert X kartus, kol pasieksite norimą įvykį.

Taigi leiskite pasakyti, kad noriu grįžti prie įsipareigojimo, kad 20 įsipareigojimų, aš turėjau paleisti jį 20 kartų.

Ar yra lengviau tai padaryti?

Negaliu naudoti naujo nustatymo, nes ši saugykla yra viešai prieinama.

609
05 янв. nustatė David 05 Jan 2010-01-05 20:01 '10, 20:01, 2010-01-05 20:01
@ 8 atsakymai

Išbandykite:

 git checkout [revision] . 

kur [revision] yra įsipareigojimo hash (pvz .: 12345678901234567890123456789012345678ab ).

Nepamirškite . galų gale labai svarbu. Tai taikys viso medžio pakeitimus. Šią komandą turite paleisti git projekto projekto šaknimi. Jei esate bet kuriame subkataloge, ši komanda pakeičia tik dabartiniame kataloge esančius failus. Tada įsipareigokite, ir jūs turėtumėte būti geri.

Galite jį atšaukti.

 git reset --hard 

kuris pašalins visus pakeitimus iš darbo katalogo ir sustojimo vietos.

900
05 янв. Atsakymas, kurį pateikė Alex Reisner Jan 05 2010-01-05 20:07 '10, 20:07, 2010-01-05 20:07

Atgal į konkretų įsipareigojimą:

 git reset --hard commit_sha 

Atnaujinimas 10 baigia darbą:

border=0
 git reset --hard HEAD~10 

Jei nenorite perrašyti istorijos, galite naudoti „git revert“, kaip ir kitame pranešime

Kaip grąžinti „Git“ saugyklą į ankstesnį įvykį?

154
14 февр. Atsakymą pateikė Naga Kiran , vasario 14 d. 2013-02-14 14:01 '13, 14:01 pm 2013-02-14 14:01

Na, manau, kad kyla klausimas, ką jūs suprantate „atkuriant“? Jei negalite reset , nes jis yra viešai prieinamas ir norite išsaugoti įsipareigojimo istoriją, ar jūs norėtumėte, kad jūsų darbo kopija atspindėtų konkretų įsipareigojimą? Naudokite git checkout ir atlikite maišą.

Redaguoti: kaip nurodyta komentaruose, naudodami „ git checkout nenurodydami filialo, pateksite į „ne filialo“ būseną. Naudokite git checkout <commit> -b <branchname> kad patikrintumėte filialą arba git checkout <commit> . patikrinti dabartiniame skyriuje.

74
05 янв. Ben atsakymą pateikė sausio 05 d. 2010-01-05 20:04 '10, 08:04 val. 2010-01-05 20:04

Originalus plakatas:

Geriausias atsakymas, kurį kas nors galėjo man duoti, buvo naudoti „ git revert X“ kartus, kol pasieksiu norimą pataisą.

Taigi leiskite pasakyti, kad noriu grįžti prie įsipareigojimo, kuris yra 20 įsipareigojimų, turiu paleisti jį 20 kartų.

Ar yra lengviau tai padaryti?

Negaliu naudoti naujo nustatymo, nes šis repo yra viešai prieinamas.

Nereikia naudoti „ git revert X kartų. git revert gali užtrukti įsipareigojimo diapazoną kaip argumentą, taigi jums reikia naudoti tik vieną kartą, kad grąžintumėte įsipareigojimo diapazoną. Pavyzdžiui, jei norite grąžinti paskutinius 20 įsipareigojimų:

 git revert --no-edit HEAD~20.. 

HEAD~20..HEAD diapazonas HEAD~20.. yra trumpas HEAD~20..HEAD ir reiškia „pradėti nuo 20-osios pirminės fiksacijos HEAD ir grąžinti visus įrašus po HEAD“.

Tai sugrąžins paskutinius 20 įsipareigojimų, darant prielaidą, kad nė vienas iš jų nėra įsipareigojimas. Jei yra susiejimas, tuomet jūs negalite grąžinti visų į vieną komandą, jums reikės juos atšaukti individualiai

 git revert -m 1 <merge-commit> 

Taip pat atkreipkite dėmesį, kad aš išbandžiau naudojant diapazoną su git revert su git versija 1.9.0. Jei naudojate senesnę „git“ versiją, naudodami diapazoną su „ git revert gali būti arba gali neveikti.

git revert Geriau nei git checkout

Atkreipkite dėmesį, kad, skirtingai nei šis atsakymas, kuriame sakoma, kad naudojant „ git checkout , „ git revert grąžinimas iš tikrųjų ištrins visus failus, kurie buvo pridėti prie bet kokių sugrįžtų įsipareigojimų, todėl tai yra tinkamas būdas grąžinti įvairius pakeitimus.

Dokumentacija

35
21 апр. atsakymas, kurį pateikė user456814 Apr 21 2014-04-21 23:12 '14, 23:12, 2014-04-21 23:12

1 veiksmas: rodomas įsipareigojimų sąrašas:

 git log 

Gausite sąrašą, kaip ir šiame pavyzdyje:

 [Comp:Folder User$ git log commit 54b11d42e12dc6e9f070a8b5095a4492216d5320 Author: author <author@gmail.com> Date: Fri Jul 8 23:42:22 2016 +0300 This is last commit message commit fd6cb176297acca4dbc69d15d6b7f78a2463482f Author: author <author@gmail.com> Date: Fri Jun 24 20:20:24 2016 +0300 This is previous commit message commit ab0de062136da650ffc27cfb57febac8efb84b8d Author: author <author@gmail.com> Date: Thu Jun 23 00:41:55 2016 +0300 This is previous previous commit message ... 

2 veiksmas: nukopijuokite įvykdymą ir įklijuokite jį patikrinimui:

 git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f 

Kas yra viskas.

20
12 июля '16 в 18:27 2016-07-12 18:27 atsakymas pateikiamas Igorui liepos 12 d., 16 val., 18:27, 2016-07-12 18:27
 git read-tree -um @ $commit_to_revert_to 

tai padarys. Tai „git checkout“, bet neatnaujinant HEAD.

Jūs galite pasiekti tą patį efektą

 git checkout $commit_to_revert_to git reset --soft @{1} 

jei norite suderinti patogias komandas.

Jie palieka jus su jūsų darbo vieta ir indeksas norima būsena, galite tiesiog užbaigti git commit .

8
06 февр. atsakymą pateikė 2006 m. vasario 6 d. 2016-02-06 23:14 '16 at 23:14 2016-02-06 23:14

Nesu tikras, kas pasikeitė, bet negaliu patvirtinti konkretaus įsipareigojimo be parinkties --detach . Visa komanda, kuri dirbo man, buvo: git checkout --detach [commit hash]

Norėdami grįžti iš atjungtos būsenos, turėjau patikrinti savo vietinį skyrių: git checkout master

1
22 февр. atsakymą pateikė Ken vasario 22 d 2017-02-22 14:45 '17, 14:45 pm 2017-02-22 14:45

Manau, kad suprantu jūsų klausimus, ką aš išsprendžiau. ir nėra GUI sprendimo, galite naudoti komandą tik ją išspręsti ir tai labai paprasta.

1 veiksmas: sukurkite seną žymą, kurią norite grąžinti.

kaip žyma v2.0

2 veiksmas: git checkout v2.0

čia tai yra, dabar jūsų HEAD nurodo „v2.0“, bet vedlys vis dar nurodo paskutinį įvykį.

C: Programos failai Git doc Git HTML git -checkout.html Šis dokumentas gali jums padėti.

arba įveskite git help <checkout>

0
02 дек. Atsakymas duotas Zian Lai 02 Dec. 2017-12-02 23:47 '17 ne 23:47 2017-12-02 23:47

Kiti klausimai apie žymes arba Užduoti klausimą