Grįžti į įsipareigojimą naudodami SHA-maišą „Git“?

Aš nesuprantu, kaip git revert darbus. Pavyzdžiui, noriu grįžti į šešis įsipareigojimus už mano vadovo, grąžindamas visus tarpinio komiteto tarpinius pakeitimus.

Tarkime, kad SHA turi 56e05fced214c44a37759efa2dfc25a65d8ae98d . Tada kodėl aš negaliu ką nors padaryti, pavyzdžiui:

 git revert 56e05fced214c44a37759efa2dfc25a65d8ae98d 

?

477
13 дек. Nustatė JP Silvashy gruodžio 13 d 2009-12-13 02:34 '09, 2:34 am 2009-12-13 02:34
@ 9 atsakymai

Jei norite, kad per dabartinį HEAD būtų priskirta tiksli būsena su kitokiu įvykiu, atšaukus visus tarpinius įsipareigojimus, galite naudoti reset kad sukurtumėte tinkamą indekso būseną, kad padarytumėte įsipareigojimą.

936
13 дек. Charles Bailey atsakymas gruodžio 13 d. 2009-12-13 02:51 '09 at 2:51 am 2009-12-13 02:51

Kas git-revert yra sukurti įsipareigojimą, kuris atšaukia tam tikro įvykio pakeitimus, sukurdamas įvykį, kuris yra konkretaus įvykio atvirkštinis (gerai, atvirkščiai). Todėl

 git revert <SHA-1> 

turėtų ir turėtų dirbti.

Jei norite atsukti atgal į nurodytą įvykį, ir jūs galite tai padaryti, nes ši istorijos dalis dar nepaskelbta, jums reikia naudoti „ git-reset“ , o ne git -revert:

border=0
 git reset --hard <SHA-1> 

(Atkreipkite dėmesį, kad - --hard netinkami darbo katalogo pakeitimai).

Papildomos pastabos

Beje, tai gali būti neaiški, bet kur dokumentai sako <commit> arba <commit-ish> (arba <object> ), galite įdėti SHA-1 (pilnas arba sutrumpintas).

97
13 дек. Jakub Narębski atsakymas, pateiktas gruodžio 13 d. 2009-12-13 12:54 '09, 12:54, 2009-12-13 12:54

Ji grąžina nurodytą įvykį, ty prideda įsipareigojimą prieš jį. Jei norite patikrinti ankstesnę peržiūrą, atlikite šiuos veiksmus:

 git checkout 56e05fced214c44a37759efa2dfc25a65d8ae98d 
83
13 дек. Michael Krelin atsakymas - įsilaužėlis 13 d 2009-12-13 02:40 '09, 2:40 am 2009-12-13 02:40

Geriausias būdas panaikinti konkretų įsipareigojimą:

 git reset --hard <commit-id> 

Tada:

 git push <reponame> -f 
54
19 нояб. atsakymą darshit khatri lapkričio 19 d 2012-11-19 16:50 '12 - 16:50 2012-11-19 16:50

Jei jūsų pakeitimai jau buvo perkelti į viešą, bendrąją nuotolinę prieigą ir norite grąžinti visus įsipareigojimus tarp HEAD ir <sha-id> , tuomet galite perduoti pataisymo diapazoną, kad galėtumėte git revert ,

 git revert 56e05f..HEAD 

ir jis grąžins visas fiksacijas tarp 56e05f ir HEAD (išskyrus intervalo pradžios tašką, 56e05f ).

46
19 дек. Atsakymą pateikė Flueras Bogdan gruodžio 19 d. 2011-12-19 16:15 2011-11-19 16:15 16:15

Atnaujinta:

Šis atsakymas yra paprastesnis nei mano atsakymas: Kaip grįžti į „Git“ saugyklą?

Originalus atsakymas

17
22 марта '13 в 8:09 2013-03-22 08:09 atsakymą pateikė Jacob Dam nuo kovo 22 d. 13:09 2013-03-22 08:09

Tai geriau suprantama:

 git checkout 56e05fced -- . git add . git commit -m 'Revert to 56e05fced' 

Ir įrodyti, kad jis dirbo:

 git diff 56e05fced 
3
23 июня '11 в 19:29 2011-06-23 19:29 atsakymą pateikė „ Tuyen Tran“ birželio 23 d. 11 val. 19:29 2011-06-23 19:29

Jis turėtų būti toks paprastas kaip:

 git reset --hard 56e05f 

Tai nuves jus atgal į šį konkrečią laiką.

0
04 янв. atsakymas pateikiamas ilgai 04 sausio. 2013-01-04 03:15 '13, 3:15, 2013-01-04 03:15

Tai gali veikti:

 git checkout 56e05f echo ref: refs/heads/master > .git/HEAD git commit 
-2
26 июня '12 в 1:36 2012-06-26 01:36 atsakymą Jake pateikė birželio 26 d. 12 d. 1:36 2012-06-26 01:36

Kiti klausimai apie žymę arba Užduoti klausimą