Įrašiau klaidingą dalyką į įsipareigojimo pranešimą.
Kaip galiu pakeisti pranešimą? Įrašas dar nebuvo išstumtas.
git commit --amend
atidarysite redaktorių, kuriame galėsite pakeisti naujausio įsipareigojimo pranešimą. Be to, galite nustatyti įsipareigojimo pranešimą tiesiogiai komandinėje eilutėje, naudodami:
git commit --amend -m "New commit message"
...tačiau dėl to gali būti sudėtingiau įvesti kelių eilučių patvirtinimo pranešimus arba nedidelius pataisymus.
Prieš atlikdami šį veiksmą įsitikinkite, kad neturite jokių darbinės kopijos pakeitimų, nes kitaip jie taip pat bus atiduoti. (Neįdiegti pakeitimai nebus perduodami.)
Jei jau'išstūmėte savo pakeitimą į nutolusią šaką, tuomet reikės priverstinai išstumti pakeitimą su:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
Įspėjimas: priverstinis išstūmimas perrašys nutolusios šakos būseną jūsų vietinės šakos būkle. Jei nutolusioje šakoje yra pakeitimų, kurių nėra jūsų vietinėje šakoje, jūs *prarasite tuos pakeitimus.
Įspėjimas: būkite atsargūs keisdami pakeitimus, kuriais jau pasidalijote su kitais žmonėmis. Pakeitus pakeitimus, jie iš esmės perrašomi, kad turėtų skirtingus SHA ID, o tai kelia problemų, jei kiti žmonės turi senų pakeitimų, kuriuos perrašėte, kopijas. Visi, kurie turi senosios redakcijos kopiją, turės sinchronizuoti savo darbą su jūsų naujai perrašyta redakcija, o tai kartais gali būti sudėtinga, todėl bandydami perrašyti bendrų redakcijų istoriją būtinai derinkite veiksmus su kitais arba apskritai venkite perrašinėti bendrų redakcijų.
Kita galimybė - naudoti interaktyvųjį rebase. Tai leidžia redaguoti bet kurį pranešimą, kurį norite atnaujinti, net jei tai nėra naujausias pranešimas.
Norėdami atlikti "Git" gniužulą, 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 sutrauksite savo pakeitimus - pasirinkite e/r
, kad galėtumėte redaguoti pranešimą:
Kai naudojate git rebase -i HEAD~X
, gali būti daugiau nei X
pakeitimų. Git "surinks" visus paskutinių X
pakeitimų pakeitimus, o jei kažkur tarp šio intervalo buvo sujungimas, pamatysite ir visus pakeitimus, taigi rezultatas bus X+<sujungtų pakeitimų skaičius>.
Jei turite tai padaryti daugiau nei vienai šakai ir galite susidurti su konfliktais keisdami turinį, nustatykite git rerere
ir leiskite "Git" tuos konfliktus išspręsti automatiškai.
Jei norimas pataisyti įsipareigojimas nėra naujausias:
git rebase --interactive $parent_of_flawed_commit
Jei norite ištaisyti kelis klaidingus pakeitimus, perduokite seniausio iš jų tėvą.
Atsidarys redaktorius, kuriame bus pateiktas visų pakeitimų, atliktų nuo to, kurį nurodėte, sąrašas.
pick
į reword
(arba senose "Git" versijose - į edit
) prieš visus pakeitimus, kuriuos norite pataisyti.Kiekvienam įsipareigojimui, kurį norite pataisyti, "Git" jus grąžins į redaktorių. Po kiekvieno įsipareigojimo, kurį norite redaguoti, "Git" grąžins jus į apvalkalą. Jei esate apvalkale:
git commit --amend
git rebase --continue
Didžiąją dalį šios sekos jums paaiškins įvairių komandų išvestis, kai ją atliksite. Tai labai paprasta; jums nereikia jos įsiminti - tiesiog prisiminkite, kad git rebase --interactive
leidžia taisyti pakeitimus, nesvarbu, prieš kiek laiko jie buvo atlikti.
Atkreipkite dėmesį, kad nenorėsite keisti jau iškeltų pakeitimų. O gal ir norėsite, bet tokiu atveju turėsite labai rūpestingai bendrauti su visais, kurie galbūt ištraukė jūsų pakeitimus ir atliko darbą pagal juos. Kaip atkurti ir (arba) iš naujo sinchronizuoti, kai kas nors į paskelbtą šaką perkelia pertvarkymą arba atstatymą?