V sporočilu za oddajo sem napisal napačno stvar.
Kako lahko spremenim sporočilo? Sporočilo še ni bilo posredovano.
git commit --amend
bo odprl urejevalnik in vam omogočil, da spremenite sporočilo zadnje oddaje. Poleg tega lahko sporočilo o opravljeni reviziji nastavite neposredno v ukazni vrstici z:
jezik: bash -->
git commit --amend -m "New commit message"
...vendar je zaradi tega lahko vnos večvrstičnih sporočil o odreditvi ali manjših popravkov bolj okoren.
Preden to storite, se prepričajte, da nimate nobenih sprememb delovne kopije, ki bi bile staged, sicer bodo tudi te oddane. (Spremembe, ki niso postavljene, ne bodo oddane.)
Če'ste že potisnili svojo spremembo v oddaljeno vejo, potem boste morali za silo potisniti spremembo z:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
Pozorilo: prisilno potiskanje bo oddaljeno vejo prepisalo s stanjem vaše lokalne veje. Če so v oddaljeni veji revizije, ki jih v lokalni veji nimate, boste te revizije izgubili.
Pozorilo: bodite previdni pri spreminjanju revizij, ki ste jih že delili z drugimi ljudmi. Spreminjanje revizij jih v bistvu prepiše tako, da imajo različne SHA ID, kar predstavlja težavo, če imajo drugi ljudje kopije stare revizije, ki ste jo prepisali. Vsi, ki imajo kopijo stare revizije, bodo morali svoje delo sinhronizirati z vašo novo prepisano revizijo, kar je včasih lahko težavno, zato se pri poskusu prepisovanja skupne zgodovine revizij uskladite z drugimi ali pa se prepisovanju skupnih revizij v celoti izognite.
Druga možnost je uporaba interaktivnega rebase. To vam omogoča urejanje vseh sporočil, ki jih želite posodobiti, tudi če to ni najnovejše sporočilo.
Če želite narediti Git squash, sledite naslednjim korakom:
// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X
Ko boste izvedli squash, izberite e/r
za urejanje sporočila:
Pri uporabi git rebase -i HEAD~X
je lahko več kot X
objav. Git bo "zbral" vse spremembe v zadnjih X
spremembah, in če je bila združitev nekje med tem razponom, boste videli tudi vse spremembe, zato bo rezultat X+<število sprememb v združitvah>.
Če morate to storiti za več kot eno vejo in bi lahko pri spreminjanju vsebine naleteli na konflikte, nastavite git rerere
in pustite, da Git samodejno reši te konflikte namesto vas.
Če revizija, ki jo želite popraviti, ni najnovejša:
git rebase --interactive $parent_of_flawed_commit
Če želite popraviti več pomanjkljivih odredb, predajte starša najstarejše od njih.
Prikazal se bo urejevalnik s seznamom vseh dopolnitev od tiste, ki ste jo navedli.
pick
v reword
(ali v starih različicah sistema Git v edit
) pred vsemi revizijami, ki jih želite popraviti.Za vsako revizijo, ki jo želite opraviti, vas bo Git vrnil v urejevalnik. Za vsako revizijo, ki jo želite redigirati, vas Git vrne v lupino. Če ste v lupini:
git commit --amend
git rebase --continue
Večino tega zaporedja vam bo razložil izpis različnih ukazov, ko boste nadaljevali. To je zelo enostavno; ni vam ga treba zapomniti - zapomnite si le, da vam git rebase --interactive
omogoča, da popravite oddaje ne glede na to, kako dolgo nazaj so bile opravljene.
Upoštevajte, da ne boste želeli spreminjati revizij, ki ste jih že poslali. Morda pa želite, vendar boste morali v tem primeru zelo paziti, da boste komunicirali z vsemi, ki so morda potegnili vaše revizije in opravili delo na njih. Kako lahko obnovim/resinhroniziram, ko nekdo na objavljeno vejo potisne ponovno vzpostavitev ali ponastavitev?