Kaip pakeisti egzistuojančius, nesuvaldomus įsipareigojimus?

Rašymo pranešime parašiau neteisingą dalyką. Taip pat pamiršau įtraukti kai kuriuos failus.

Kaip pakeisti pranešimą / failus? Įsipareigojimas dar neprasidėjo.

7676
07 окт. nustatė Laurie Young 07 spalis 2008-10-07 18:44 '08 at 18:44 2008-10-07 18:44
@ 27 atsakymai

Pakeičiamas naujausias įsipareigojimo pranešimas

 git commit --amend -m "New commit message" 

... Tačiau tai gali padaryti sunkiau įvesti daugialypius pranešimus ar mažus pataisymus.

Prieš tai atlikdami įsitikinkite, kad neturite jokių darbo kopijos pakeitimų, kitaip jie bus nustatyti. (Neatlikti pakeitimai nebus nustatyti.)

Pakeisti jau išsiųstą pranešimą apie nuotolinį filialą

Jei jau esate stumdę savo įsipareigojimą į nuotolinį filialą, tuomet privalote priversti įsipareigojimą :

SHA ID, kurie sukelia problemų, jei kiti žmonės turi senų įsipareigojimų kopijas, kurias jūs perrašėte.  Kiekvienas, turintis senojo įsipareigojimo kopiją, turės sinchronizuoti savo darbą su naujai perrašytu įsipareigojimu, kuris kartais gali būti sudėtingas, todėl įsitikinkite, kad jūs koordinuojate su kitais, kai bandote perrašyti bendrų įsipareigojimų istoriją, arba tiesiog vengti perrašyti bendrai. 


Naudokite interaktyvų „rebaz“

Kitas variantas yra naudoti interaktyviąsias versijas.
Tai leidžia redaguoti bet kokį pranešimą, kurį norite atnaujinti, net jei jis nėra paskutinis pranešimas.

Jei norite padaryti gitų skvošą, atlikite šiuos veiksmus:

 // X is the number of commits to the last commit you want to be able to edit git rebase -i HEAD~X 

Kai tik sugadinsite savo įsipareigojimus, pasirinkite e/r kad redaguotumėte pranešimą.

2019

07 окт. Atsakymas duotas EfForEffort 07 okt. 2008-10-07 18:50 '08 at 18:50 pm 2008-10-07 18:50
2438
08 февр. Atsakymas pateikiamas lfx_cool 08 Feb. 2010-02-08 07:26 '10, 7:26 val. 2010-02-08 07:26

Jei taisymas, kurį norite pataisyti, nėra paskutinis:

  • git rebase --interactive $parent_of_flawed_commit

    Jei norite nustatyti kelis klaidingus įsipareigojimus, atlikite seniausiojo kodą.

  • Pasirodo redaktorius, kuriame pateikiamas visų sąrašas, nes jis buvo padarytas.

    • Pakeiskite pick kad reword (ar reword senas „Git“ versijas) prieš pataisymus, kuriuos norite pataisyti.
    • Po išsaugojimo „Git“ pakartos išvardytus įsipareigojimus.

  • Už kiekvieną įvykį, kurį norite iš naujo atlikti, „Git“ nuves jus atgal į redaktorių. Už kiekvieną įvykį, kurį norite keisti, „Git“ nukelia jus į apvalkalą. Jei esate apvalkale:

    • Pakeiskite fiksavimą bet kokiu būdu.
    • git commit --amend
    • git rebase --continue

Didžiąją šios sekos dalį jums paaiškins įvairių komandų išeiga. Tai labai paprasta, jums nereikia įsiminti - tiesiog nepamirškite, kad „ git rebase --interactive leidžia jums išspręsti, nesvarbu, kiek laiko jie buvo.


Atkreipkite dėmesį, kad nenorite pakeisti jau prisiimtų įsipareigojimų. O gal jūs, bet šiuo atveju turėsite labai atidžiai bendrauti su visais, kurie galėjo ištraukti savo įsipareigojimus ir atlikti darbus ant jų. Kaip atkurti / iš naujo sinchronizuoti po to, kai kas nors nuvilkė atkūrimą ar iš naujo į paskelbtą temą?

2321
07 окт. atsakymą pateikė Aristotelis Pagaltzis 07 spalis 2008-10-07 22:52 '08, 10:52 val. 2008-10-07 22:52

Jei norite atlikti ankstesnio įsipareigojimo pakeitimus, atlikite būtinus pakeitimus ir atlikite šiuos pakeitimus, tada paleiskite

 git commit --amend -C HEAD 

Jei norite pataisyti ankstesnį įvykį, visiškai jį pašalinkite

 git rebase -i HEAD~ commit_count 

(Pakeiskite įsipareigojimų_paskyrą su norimų keisti įvykių skaičiumi.) Ši komanda pradeda redaktorių. Pažymėkite pirmąjį laikiklį (vieną, kurį norite keisti) kaip „redaguoti“ vietoj „pasirinkite“, tada išsaugokite ir išeikite iš redaktoriaus. Atlikite pakeitimus, kuriuos norite atlikti, ir paleiskite

758
16 авг. Atsakymą pateikė Fatih 16 rug. 2011-08-16 00:20 '11 prie 0:20 2011-08-16 00:20

Kaip minėta, git commit --amend yra būdas perrašyti paskutinį git commit --amend . Viena pastaba: jei norite perrašyti failus , komanda bus

390
07 июня '11 в 0:16 2011-06-07 00:16 atsakymą pateikė Jonas 07 birželio 11 d. 0:16 2011-06-07 00:16

Tam taip pat galite naudoti „git“ filter-branch .

351
01 сент. Atsakyti Mark 01 Sep 2012-09-01 23:35 '12, 23:35, 2012-09-01 23:35

Man tai patinka.

 git commit --amend -c <commit ID> 

Priešingu atveju bus naujas įsipareigojimas su nauju įsipareigojimų ID.

312
10 янв. Atsakymas, kurį pateikė Krevedko Jan 10 2013-01-10 17:23 '13, 17:23, 2013-01-10 17:23

Jei naudojate Git GUI įrankį, yra mygtukas, pavadintas paskutinis paskutinis. Spustelėkite šį mygtuką, tada parodykite naujausius įvykdymo failus ir pranešimą. Tiesiog redaguokite šį pranešimą ir galite jį išspręsti nauju pranešimu.

Arba naudokite šią komandą iš konsolės / terminalo:

 git commit -a --amend -m "My new commit message" 
309
08 нояб. atsakymas pateikiamas Akhilraj NS 08 lapkričio. 2012-11-08 06:51 '12 at 6:51 am 2012-11-08 06:51

Galite naudoti „ git rebasing“ . Pavyzdžiui, jei norite grįžti į bbc643cd, paleiskite

 $ git rebase bbc643cd^ --interactive 

Numatytoje redaktoriuje pakeiskite „pick“ į „redaguoti“ eilutėje, kurios įsipareigojimą norite pakeisti. Atlikite pakeitimus ir vykdykite juos

 $ git add <filepattern> 

Dabar galite naudoti

 $ git commit --amend 

keisti įsipareigojimą ir po to

 $ git rebase --continue 

grįžti prie ankstesnio skyriaus fiksavimo.

282
22 янв. atsakymą pateikė Shoaib Ud-Din 2013-01-22 20:23 '13, 20:23, 2013-01-22 20:23
  • Jei norite pakeisti paskutinį įvykio pranešimą, atlikite šiuos veiksmus:

     git commit --amend 

    Tai nuves jus į teksto redaktorių ir leis jums pakeisti paskutinį pranešimo pranešimą.

  • Jei norite pakeisti paskutinius 3 priskyrimo pranešimus arba bet kokius git rebase -i pranešimus į šį tašką, į „ git rebase -i įdėkite HEAD~3 :

     git rebase -i HEAD~3 
275
22 окт. Heenos Hussaino atsakymas spalio 22 d 2012-10-22 14:22 „12 at 14:22 pm 2012-10-22 14:22

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

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

naudoti

 git commit --amend 

Norėdami tai suprasti išsamiai, puikus pranešimas yra 4. Perrašyti „Git“ istoriją . Jis taip pat jums pasakys, kada nenaudoti git commit --amend .

221
27 марта '13 в 23:43 2013-03-27 23:43 atsakymas duotas odai kovo 27 d. 13 val. 23:43 2013-03-27 23:43

Iš dalies pakeisti

Turite kelias parinktis. Jūs galite tai padaryti

 git commit --amend 

kol jis bus įvykdytas paskutinis.

Interaktyvus peradresavimas

Priešingu atveju, jei tai ne jūsų paskutinis įsipareigojimas, galite atlikti interaktyvų perkrovimą,

 git rebase -i [branched_from] [hash before commit] 

Tada interaktyvaus peradresavimo viduje paprasčiausiai pridedate šio įsipareigojimo redagavimą. Kai tai atsitiks, atlikite git commit --amend ir pakeiskite git commit --amend pranešimą. Jei norite grįžti prie šio fiksavimo taško, taip pat galite naudoti git reflog ir tiesiog pašalinti šį pataisymą. Tada vėl paleisite git commit .

195
18 янв. Atsakymas pateikiamas wallerjake 18 sausis 2013-01-18 04:45 '13, 04:45 am 2013-01-18 04:45

Jei naudojate „Git“ GUI, galite pakeisti paskutinį įvykį, kuris nebuvo spustelėtas:

 Commit/Amend Last Commit 
183
01 дек. Atsakymą pateikė gulchrider 01 Dec. 2012-12-01 08:03 '12, 08:03 2012-12-01 08:03

Jei tai jūsų paskutinis įsipareigojimas, tiesiog nustatykite įsipareigojimą:

 git commit --amend -o -m "New commit message" 

(naudodami -o (- --only ) vėliavą, kad įsitikintumėte, jog pakeisite tik įsipareigojimo pranešimą)


Jei atrodo kaip įsipareigojimas, naudokite nuostabią interaktyvią versiją :

 git rebase -i @~9 # Show the last 9 commits in a text editor 

Raskite norimą įvykį, pakeiskite pick į r ( reword ) ir išsaugokite ir uždarykite failą. Priimta!



Miniatiūrinė pamoka vim (arba kaip įdiegti tik 8 klavišus 3j cw r Esc ZZ ):

  • Jei turite laiko, paleiskite vimtutor .
  • h j k l atitinka naršymo mygtukus
  • Visose komandose gali būti, pavyzdžiui, prefiksas. 3j pereina į 3 eilutes
  • i , įeiti į įterpimo režimą - įvestas tekstas bus rodomas faile
  • Esc arba Ctrl c norite išeiti iš įėjimo režimo ir grįžti į įprastą režimą.
  • u atšaukti
  • Ctrl r kartoti
  • dd , dw , dl atitinkamai ištrinti eilutę, žodį ar raidę
  • cc , cw , cl norite pakeisti eilutę, žodį ar raidę (tas pats kaip dd i )
  • yy , yw , yl atitinkamai nukopijuokite („yank“) linijas, žodžius ar raides
  • p arba p įterpti po arba prieš dabartinę padėtį
  • :w Įveskite failą (įrašykite)
  • :q! Įveskite išėjimą, neišsaugodami
  • :wq Enter arba ZZ norite išsaugoti ir išeiti

Jei redaguojate daug teksto, pereikite prie „Dvorako“ klaviatūros išdėstymo, sužinokite, kokio tipo ir mokykitės vim. Ar verta pastangų? Taip



„ProTip ™“: nebijokite eksperimentuoti su „pavojingomis“ komandomis, kurios perrašo istoriją * - „Git“ nepašalina jūsų pataisymų 90 dienų pagal nutylėjimą; Juos galite rasti „reflog“:

 $ git reset @~3 # go back 3 commits $ git reflog c4f708b HEAD@{0}: reset: moving to @~3 2c52489 HEAD@{1}: commit: more changes 4a5246d HEAD@{2}: commit: make important changes e8571e4 HEAD@{3}: commit: make some changes ... earlier commits ... $ git reset 2c52489 ... and you're back where you started 

* Saugokitės tokių parametrų, kaip ir „ --hard and- --force , nors jie gali atmesti duomenis.
* Taip pat nereikia perrašyti istorijos jokiuose filialuose, su kuriais bendradarbiaujate.

170
10 февр. Atsakymas pateikiamas Zaz 10 vas. 2015-02-10 03:01 '15 at 3:01 2015-02-10 03:01

Aš naudoju Git GUI tiek, kiek galiu, ir tai suteikia jums galimybę pakeisti paskutinį pranešimą:

2019

165
05 авг. atsakymą pateikė Havardas Graffas 05 rug. 2013-08-05 02:13 '13, 2:13 2013-08-05 02:13

Oho, todėl yra daug būdų tai padaryti.

Kitas būdas tai padaryti yra ištrinti paskutinį įvykį, bet išsaugoti jo pakeitimus, kad neprarastumėte savo darbo. Tada galite atlikti kitą įsipareigojimą su pataisytu pranešimu. Tai atrodys taip:

135
03 дек. Atsakymą pateikė Radu Murzea 03 dec. 2013-12-03 00:31 '13 - 0:31 2013-12-03 00:31

Jei norite pakeisti paskutinį įsipareigojimo naudojimą:

 git commit --amend 

arba

124
07 янв. atsakymas, kurį pateikė Shubham Chaudhary 07 Jan 2014-01-07 01:03 '14 at 1:03 2014-01-07 01:03

Tiems, kurie ieško grafinės vartotojo sąsajos „Windows“ / „Mac“, kad padėtų redaguoti senus pranešimus (t.y. ne tik naujausius pranešimus), norėčiau rekomenduoti „ SourceTree“ . Tolesni veiksmai.

2019

123
06 нояб. Atsakymą pateikė Steve Chambers, lapkričio 6 d 2014-11-06 18:01 '14 at 18:01 2014-11-06 18:01

Jei norite pakeisti paskutinį pranešimą, turite naudoti „ --only vėliavą“ arba jos nuorodą su commit --amend :

122
23 мая '14 в 11:40 2014-05-23 11:40 atsakė David Ongaro gegužės 23 d., 14 val

Atnaujinkite paskutinį klaidos pranešimą su nauju įsipareigojimų pranešimu vienoje eilutėje:

 # You can reset your head to n number of commit # NOT a good idea for changing last commit message # but you can get an idea to split commit into multiple commits git reset --soft HEAD^ # it will reset you last commit. Now, you # can re-commit it with new commit message. 

Naudokite atkūrimą, kad padalytumėte į mažesnius įsipareigojimus.

git reset gali padėti jums nutraukti vieną įsipareigojimą į kelis įsipareigojimus:

99
22 янв. atsakymas pateikiamas przbadu 22 sausis 2014-01-22 11:57 '14 at 11:57 2014-01-22 11:57

Yra daug atsakymų į šį klausimą, tačiau nė vienas iš jų išsamiai nepaaiškina, kaip pakeisti senus fiksavimo pranešimus su VIM. Aš stengiuosi tai padaryti pats, todėl čia išsamiai pasakysiu, kaip aš tai padariau ypač žmonėms, neturintiems VIM patirties!

Aš norėjau pakeisti savo paskutinius penkis įsipareigojimus, kuriuos jau buvau paspaudęs serveryje. Tai gana „pavojinga“, jei kas nors iš jos ištraukė, galite sugadinti daiktus keisdami pranešančius pranešimus. Tačiau, kai dirbate su savo mažu filialu ir esate tikri, kad niekas ištraukė jį, galite jį pakeisti taip:

Tarkime, kad norite pakeisti savo paskutinius penkis įsipareigojimus, tada įveskite jį terminale:

git rebase -i HEAD~5 * Kur 5 yra įsipareigojimų pranešimų, kuriuos norite keisti, skaičius. (taigi, jei norite pakeisti 10-ą iki paskutinio įvykio, įveskite 10)

Ši komanda padės jums VIM, kur galėsite redaguoti savo įvykių istoriją. Jūs pamatysite paskutinius 5 įvykius viršuje:

pick <commit hash> commit message

Vietoj to, kad reword turite rašyti reword . Tai galite padaryti VIM, įvesdami i , kuri verčia jus eiti į INSERT režimą. (Jūs matote, kad esate įterpimo režimu, kai žodis INSERT žemiau). Už įsipareigojimus norite pakeisti tipą, o ne pick

Tada jums reikia išsaugoti ir išeiti iš šio ekrano, tai atlikdami pirmiausia pereikite prie komandų režimo paspausdami esc mygtuką. (galite patikrinti, ar esate komandiniame režime, jei žodis INSERT išnyksta žemiau). Tada galite įvesti komandą įvesdami wq išsaugoti ir išeiti komanda yra wq . Todėl, jei įvedate :wq youre ont, jis bus teisus.

Tada VIM pereis prie bet kokio įsipareigojimo pranešimo, kurį norite perrašyti, čia galite iš tikrųjų keisti įvykio pranešimą. Tai darote, eidami į „INSERT“ režimą, pakeisdami pranešančioji žinutė, eidami į komandų režimą, taupydami ir uždarydami. Padarykite tai 5 kartus, o jūs esate iš VIM!

Tada, jei jau git push --force neteisingus įsipareigojimus, turite priversti git push --force jas perrašytumėte. Atminkite, kad git push --force yra gana pavojingas dalykas, todėl įsitikinkite, kad niekas git push --force iš serverio, nes paspaudėte neteisingus įsipareigojimus!

Dabar jūs pakeitėte savo pranešimą įsipareigoti!

(Kaip matote, aš ne taip pat esu patyręs VIM, todėl, jei naudoju klaidingą „slengą“, kad paaiškintume, kas vyksta, nedvejodami ištaisykite mane!)

82
07 авг. atsakymas pateikiamas Marijn 07 rug. 2014-08-07 12:18 '14 at 12:18 2014-08-07 12:18

Galite naudoti git-rebase-reword

Jis skirtas redaguoti bet kokį commit --amend (ne tik paskutinįjį), kaip ir commit --amend

 $ git rebase-reword <commit-or-refname> 

Он назван в честь действия по интерактивной переадресации, чтобы исправить фиксацию: "изменить". См. этот пост и man -section interactive mode-

Pavyzdžiai:

 $ git rebase-reword b68f560 $ git rebase-reword HEAD^ 
76
ответ дан albfan 21 февр. '15 в 15:21 2015-02-21 15:21

Я добавил псевдоним reci , recm для recommit (amend) it, теперь я могу сделать это с помощью git recm или git recm -m .

 $ vim ~/.gitconfig [alias] ...... cm = commit reci = commit --amend recm = commit --amend ...... 
76
ответ дан Chu-Siang Lai 06 янв. '14 в 10:24 2014-01-06 10:24