git ready

leer git een commit per keer
by Nick Quaranto

kapotte commit boodschappen repareren

Toegevoegd op 12 Jan 2009

Je hebt zojuist die geweldige functionaliteit/test/fout ge-commit, maar toch klopt er iets niet. Sommige informatie is verkeerd ingevuld of de commit boodschap is verkeerd, of iets anders is kapot. Laten we kijken naar wat er kan worden gedaan om de bijbehorende data te repareren nadat je deze hebt ge-commit.

De vorige commit repareren is heel eenvoudig. Gebruik gewoon

git commit --amend

Dit start de commit patch in $EDITOR om mee te frunniken. Wijzig de boodschap op de bovenste regel van het bestand, sla op, sluit en klaar is Kees.

Stel nu dat je een aantal commit-s moet repareren, of de commit die kapot is van een aantal commit-s geleden. Dit proces is iets gecompliceerder, maar niet slecht. (Bedankt Evan Phoenix voor deze tip.)

Hier is het scenario: de laatste 3 commit-s hebben de verkeerde gebruikersnaam, email, of misschien commit boodschap. Laten we beginnen met het genereren van patch bestanden voor de commit-s:

git format-patch HEAD^^^

Dit zal bestanden genereren van de vorm 0001-commit-boodschap welke de diff en metadata zullen bevatten. Een opmerking over de drie ^ symbolen: voeg een ^ toe voor iedere commit die je terug wil, en wees consistent! EDIT: Je kunt ook naar vorige commit s verwijzen met HEAD~n syntaxis, voor dit voorbeeld zouden we dus HEAD~3 gebruiken. Wijzig deze bestanden zodat de juiste informatie er staat. Wanneer je dat gedaan hebt dienen we ons repository naar een paar commit-s eerder te reset-en:

git reset --hard HEAD^^^

Nu kunnen we iedere commit apply-en om de informatie te repareren. Verzeker jezelf ervan dat je dit in de juiste volgorde doet! (Normaliter is dit van laag naar hoog)

git am < 0001...
git am < 0002...
git am < 0003...

Wanneer je nu git log naloopt zou je de correcte informatie moeten zien. Als op een of andere wijze iets in de soep is gelopen, brengt

git reset --hard origin/master

je weer terug naar je originele wijzigingen. Wanneer je de informatie hebt gerepareerd, dien je een push te forceren op je repository:

git push -f

Wanneer je de -f weg laat, zal git klagen. WAARSCHUWING! Wees je ervan bewust dat het wijzigen van de commit boodschappen iemand anders zijn repository kan verknallen derhalve dient het met zorg gebruikt te worden. In feite kun je met dit soort acties de toorn van menig ontwikkelaar op je hals halen. Wanneer het ver in de geschiedenis is, is het waarschijnlijk sowieso niet zo’n goed idee bad idea to rewrite history anyway.

Wanneer je onverwachte of niet aangemerkte consequenties waarneemt laat het ons dan weten via de commentaren. Een andere tip in de toekomst zal het repareren behandelen van de bestanden die onderdeel uitmaken van de commit en daarbij het naar de laatste toestand brengen van alle repository-s.