Hoe wijzig je bestaande, niet gepushte commit berichten?
Ik schreef de verkeerde dingen in een commit bericht.
Hoe kan ik de boodschap veranderen? De commit is nog niet gepushed.
7670
3
Ik schreef de verkeerde dingen in een commit bericht.
Hoe kan ik de boodschap veranderen? De commit is nog niet gepushed.
De meest recente commit boodschap wijzigen
zal je editor openen, zodat je de commit boodschap van de meest recente commit kunt wijzigen. Daarnaast kun je de commit boodschap direct in de commandoregel instellen met:
...maar dit kan meervoudige commit boodschappen of kleine correcties lastiger in te voeren maken.
Zorg er voor dat je geen werkkopie wijzigingen gestaged hebt voordat je dit doet, anders worden die ook vastgelegd. (Unstaged wijzigingen worden niet vastgelegd).
Verander de boodschap van een commit die je al naar je remote branch gepushed hebt
Als je'je commit al naar je remote branch gepushed hebt, dan zul je de commit moeten forceren terug te zetten met:
Waarschuwing: force-pushing zal de remote branch overschrijven met de status van je lokale branch. Als er commits op de remote branch staan die je niet in je lokale branch hebt, dan zal je die commits verliezen.
Waarschuwing: wees voorzichtig met het wijzigen van commits die je al met andere mensen gedeeld hebt.Het wijzigen van commits herschrijft* ze in wezen om verschillende SHA IDs te hebben, wat een probleem oplevert als andere mensen kopieën hebben van de oude commit die je herschreven hebt. Iedereen die een kopie van de oude commit heeft zal hun werk met jouw nieuw herschreven commit moeten synchroniseren, wat soms moeilijk kan zijn, dus zorg ervoor dat je met anderen coördineert als je gedeelde commit geschiedenis probeert te herschrijven, of vermijd gewoon gedeelde commits helemaal te herschrijven.
Gebruik interactieve rebase
Een andere optie is om interactieve rebase te gebruiken. Hiermee kunt u elk bericht bewerken dat u wilt bijwerken, zelfs als het niet het laatste bericht is.
Om een Git squash te doen, volg je deze stappen:
Zodra je je commits squasht -
Belangrijke opmerking over interactieve rebase
Als je
git rebase -i HEAD~X
gebruikt, kunnen er meer danX
commits zijn. Git zal "alle commits in de laatsteX
commits verzamelen" en als er ergens tussen dat bereik een samenvoeging was, zul je alle commits ook zien, dus de uitkomst zal X+ zijn.Goede tip:
Als je het voor meer dan een enkele branch moet doen en je zou conflicten kunnen tegenkomen bij het wijzigen van de inhoud, stel dan
git rerere
in en laat Git die conflicten automatisch voor je oplossen.Documentatie
git-commit(1) Handleiding pagina
git-rebase(1) Handleiding pagina
git-push(1) Handleiding pagina
Als de commit die je wilt repareren niet de meest recente is:
git rebase --interactive $parent_of_flawed_commit
Als je meerdere foutieve commits wilt repareren, geef dan de ouder van de oudste van die commits door.
Een editor zal verschijnen, met een lijst van alle commits sinds de commit die je hebt opgegeven.
pick
inreword
(of op oude versies van Git, inedit
) voor elke commits die je wilt repareren.Voor iedere commit die je wilt herformen, zal Git je terug in je editor laten vallen. Voor iedere commit die je wilt bewerken, zal Git je in de commandoregel droppen. Als je in de commandoregel bent:
git commit --amend
git rebase --continue
Het meeste van deze volgorde zal je uitgelegd worden door de uitvoer van de verschillende commando's terwijl je bezig bent. Het is erg makkelijk; je hoeft het niet uit je hoofd te leren - onthoud alleen dat
git rebase --interactive
je commits laat corrigeren, ongeacht hoe lang geleden ze waren.Merk op dat je geen commits wilt veranderen die je al gepushed hebt. Of misschien wil je dat wel, maar in dat geval zul je goed moeten communiceren met iedereen die jouw commits heeft gepulled en er werk op heeft gedaan. Hoe herstel/resynchroniseer ik nadat iemand een rebase of een reset naar een gepubliceerde branch heeft gepushed?