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.

Oplossing

De meest recente commit boodschap wijzigen

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).

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:

git push   --force
# Or
git push   -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.


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:

// 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 -

Belangrijke opmerking over interactieve rebase

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+ 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

Commentaren (32)
git commit --amend -m "your new message"
Commentaren (15)

Als de commit die je wilt repareren niet de meest recente is:

  1. 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.

  2. Een editor zal verschijnen, met een lijst van alle commits sinds de commit die je hebt opgegeven.

    1. Verander pick in reword (of op oude versies van Git, in edit) voor elke commits die je wilt repareren.
    2. Zodra je opslaat, zal Git de genoemde commits opnieuw afspelen.

  3. 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:

    1. Verander de commit op iedere manier die je wilt.
    2. git commit --amend
    3. 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?

Commentaren (15)