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.