Atšaukite tam tikrą įvykį, kuris buvo perkeltas į nuotolines saugyklas

Koks paprasčiausias būdas atšaukti konkretų įsipareigojimą:

  • ne galvos ar galvos
  • Spustelėjo nuotolinio kompiuterio.

Nes jei tai ne paskutinis pataisymas,

 git reset HEAD 

neveikia. Ir kadangi jis buvo spustelėtas nuotolinio valdymo pulte,

 git rebase -i 

ir

 git rebase --onto 

sukels problemų konsolėse.

Be to, aš nenoriu tikrai pakeisti istorijos. Jei buvo blogas kodas, tai buvo istorijoje ir gali būti matoma. Aš tik noriu, kad jis būtų darbo kopijoje, ir aš nežinau, kad būtų sujungta.

Kitaip tariant, ką reiškia „ Git“ reikšmė lygi šioms svn komandoms:

 svn merge -r 303:295 http://svn.example.com/repos/calc/trunk 

kuris pašalina visus pakeitimus nuo 295 iki 302, sujungiant visus šių pakeitimų pakeitimus kaip naują įsipareigojimą.

 svn merge -c -302 ^/trunk 

kuris atšaukia 302 įvykį, žinoma, pridedant kitą įvykį, kuris atvirkščiai konvertuoja pakeitimus su atitinkamu įvykiu.

Maniau, kad tai turėtų būti gana paprasta operacija Git'e ir gana paplitęs atvejis. Kokia yra atominių įsipareigojimų reikšmė?

Mes stashing ir viskas, kad užtikrintų, kad įsipareigojimai yra visiškai atominiai, ar negalite atšaukti vieno ar daugiau šių atomų, kurie būtų lengvai nustatyti?

527
23 февр. nustatė Lakshman Prasad , vasario 23 d 2010-02-23 17:21 '10, 17:21, 2010-02-23 17:21
@ 3 atsakymai

Apibrėžkite įsipareigojimo hash naudodami git log , tada naudokite git revert <commit> kad sukurtumėte naują įsipareigojimą, kuris pašalintų šiuos pakeitimus. Tam tikra prasme „ git revert yra atvirkštinis „ git cherry-pick simbolis - pastarasis patenka į filialą, kurio trūksta, pirmasis pašalina jį iš šakos, kurioje jis yra.

829
23 февр. Atsakymą pateikė Andrew Aylett , vasario 23 d. 2010-02-23 17:31 '10, 17:31, 2010-02-23 17:31

Man nepatinka automatiškai įsipareigoti git revert , todėl tai gali būti naudinga kai kuriems.

Jei norite, kad pakeistos rinkmenos nebūtų automatiškai įvykdytos , galite naudoti --no-commit

 % git revert --no-commit <commit hash> 
border=0

kuris yra tas pats, kaip -n

 % git revert -n <commit hash> 
250
17 мая '13 в 1:50 2013-05-17 01:50 atsakymas pateikiamas Naomik gegužės 17 d., „13 at 1:50 2013-05-17 01:50

Kadangi jis jau buvo paspaustas, neturėtumėte tiesiogiai manipuliuoti istorija. git revert “ sugrąžins tam tikrus pakeitimus iš įsipareigojimo naudojant naują įsipareigojimą, kad nebūtų manipuliuojama įvykdymo istorija.

30
23 февр. moatPylon atsakymas, pateiktas vasario 23 d. 2010-02-23 17:28 '10, 17:28, 2010-02-23 17:28

Kiti klausimai apie „ žymes „ arba „ Ask a question“