Atsitiktinis paspaudimų įvykdymas: pakeiskite git'o pranešimą

Mano vietinėje repo, turiu vieną pranešimą su pranešimu apie neteisingą įsipareigojimą.

Aš jau parašiau neteisingą pranešimą su „ git push pranešimu.

Dabar nuotolinis repo (kuris yra priimtas „GitHub“) taip pat turi neteisingą pranešimą.

Aš jau bandžiau git commit --amend , bet nustatėme, kad šioje situacijoje man tai neveiks, nes padariau papildomus įsipareigojimus neteisingu.

Kaip galėtumėte išspręsti šią padėtį?

63
17 февр. nustatė Jonny , vasario 17 d 2011-02-17 20:29 '11, 20:29, 2011-02-17 20:29
@ 4 atsakymai

Paprasčiausias sprendimas yra ( , tačiau prieš tai atlikdami perskaitykite visą atsakymą ):

  • git rebase -i <hash-of-commit-preceding-the-incorrect-one>
  • Atsidariusiame redaktoriuje pakeiskite reword , kad eilutėje reword , kad būtų neteisingai pataisyta.
  • Išsaugokite failą ir uždarykite redaktorių.
  • Redaktorius vėl atidarys pranešimą apie neteisingą paskyrimą. Ištaisykite.
  • Išsaugokite failą ir uždarykite redaktorių.
  • git push --force atnaujinti git push --force .

Tai reiškia, kad paskelbsite pakeistą anksčiau paskelbtos saugyklos versiją. Jei kas nors pasitraukė iš jūsų repo tarp jūsų, kai padarėte klaidą su neteisingu pranešimu apie komisiją, ir kai ją nustatėte, vėliau jie susidurs su tam tikrais sunkumais. Todėl prieš bandydami tai padaryti, įsitikinkite, kad galite priimti šią išvadą.

89
17 февр. Dan Molding atsakymas vasario 17 d 2011-02-17 20:50 '11, 20:50, 2011-02-17 20:50

Vietoj to, kad būtų laikomasi viso nukreipimo maršruto vienam įvykiui:

 git reset --soft head~ git commit -m "The message you wanted to use" git push -f 
border=0

Jūs galite matyti parametrus „ git-reset“ puslapyje.

Projektui, kuriame dirbate, pakeista istorija neturėtų būti problema.

33
17 февр. Abizern atsakė 17 vasario mėn 2011-02-17 21:03 '11, 21:03, 2011-02-17 21:03

Jei reikia pakeisti seną įsipareigojimų pranešimą į kelis filialus (t. Y. Keliose šakose yra pranešimas su klaidos pranešimu), galite naudoti

 git filter-branch -f --msg-filter 'sed "s/<old message>/<new message>/g"' -- --all 

pakeisti įvykio pranešimą.

„Git“ sukurs laikiną katalogą, skirtą perrašyti ir pasirinktinai kopijuoti senas nuorodas į nuorodas / originalus /.

-f bus operacija. Tai būtina, jei laikinas katalogas jau yra, arba jau yra nuorodų, saugomų refs / original faile. Jei ne, galite vėl nustatyti šią vėliavą.

-- atskiria filtravimo šakos parinktis nuo versijos parametrų

- Visi užtikrins, kad visi filialai ir žymės būtų perrašyti.

Dėl senų nuorodų atsarginės kopijos galite lengvai grįžti į būseną prieš vykdant komandą.

Tarkime, kad norite atkurti pagrindinį valdiklį ir prieiti prie jo senosios meistro šakos:

 git checkout -b old_master refs/original/refs/heads/master 

Kai esate patenkinti pakeitimais, naudokite git stumti -f, kad atliktumėte pakeitimus savo viešajame repo.

Atkreipkite dėmesį, kad apie tai turite informuoti darbuotojus, nes visi įvykdyti maišos, kurios prasideda nuo pirmojo modifikuoto, buvo pakeistos.

5
15 нояб. Atsakymą pateikia „ sebers“ lapkričio 15 d. 2012-11-15 12:46 '12 12:46 2012-11-15 12:46

Jei nepaspaudėte kodo nuotolinio filialo („Github“ / „Bitbucket“), galite pakeisti komandų eilutės įsipareigojimų pranešimą, kaip parodyta žemiau.

  git commit --amend -m "Your new message" 

Jei dirbate su konkrečiu filialu, tai atlikite.

 git commit --amend -m "BRANCH-NAME: new message" 

Jei jau paspaudėte kodą neteisingu pranešimu, pakeičiant pranešimą turite būti atsargūs. po to, kai pakeisite įsipareigojimo pranešimą ir bandysite jį dar kartą paspausti, turėsite problemų. Kad jis būtų sklandus, atlikite šiuos veiksmus. Prieš tai perskaitykite visą atsakymą.

 git commit --amend -m "BRANCH-NAME : your new message" git push -f origin BRANCH-NAME # Not a best practice. Read below why? 

Svarbi pastaba :. Paspaudus stumti, galite susidurti su problemomis, su kuriomis kiti kūrėjai dirba toje pačioje šakoje. Todėl, norėdami išvengti konfliktų, turite ištraukti kodą iš savo šakos, prieš paspausdami jėgą

  git commit --amend -m "BRANCH-NAME : your new message" git pull origin BRANCH-NAME git push -f origin BRANCH-NAME 

Tai yra geriausia praktika, kai keičiamas įsipareigojimo pranešimas, jei jis jau buvo paspaustas.

2
13 янв. Atsakymą pateikė Packer Jan 13 2015-01-13 10:08 '15 - 10:08 2015-01-13 10:08

Kiti klausimai apie „ arba klausia