Ik schreef de verkeerde dingen in een commit bericht.
Hoe kan ik de boodschap veranderen? De commit is nog niet gepushed.
git commit --amend
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:
git commit --amend -m "New commit message"
...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).
Als je'je commit al naar je remote branch gepushed hebt, dan zul je de commit moeten forceren terug te zetten met:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
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.
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:
// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X
Zodra je je commits squasht -
Als je git rebase -i HEAD~X
gebruikt, kunnen er meer dan X
commits zijn. Git zal "alle commits in de laatste X
commits verzamelen" en als er ergens tussen dat bereik een samenvoeging was, zul je alle commits ook zien, dus de uitkomst zal X+
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.
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
in reword
(of op oude versies van Git, in edit
) 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?