Iets misgegaan? Terugdraaien met git als je met Claude Code werkt
Laat Claude Code na elke stap die werkt een commit maken, een vastgelegde versie van je map waar je altijd naar terug kunt. Gaat er iets mis, draai dan terug met een nieuwe commit die de fout ongedaan maakt, zodat er niets uit de geschiedenis verdwijnt. Binnen één sessie kan het sneller met /rewind, maar die herstelpunten zien alleen wat Claude zelf in bestanden schreef.
Werk je met Claude Code, dan wil je twee manieren hebben om terug te gaan. Git is de belangrijkste: een programma dat de geschiedenis van je project bewaart, zodat je kunt teruggaan naar elke eerdere versie die werkte. Daarnaast houdt Claude Code zelf herstelpunten bij, waarmee je binnen een sessie snel een stap ongedaan maakt. Het eerste regel je met één afspraak: na elke stap die werkt, maakt Claude een commit. Wat dat is en hoe je ermee terugdraait, lees je hieronder.
Git in gewone woorden
Git legt de toestand van je projectmap vast op momenten die jij kiest. Zo’n vastlegging heet een commit. Elke commit krijgt een eigen code, zoals c81f2d4, en een korte beschrijving van wat er veranderde. Later kun je naar elke commit terug, en je kunt opvragen wat er tussen twee commits anders werd. Git draait gewoon op je eigen server of laptop. Een account bij een dienst als GitHub heb je er niet voor nodig.
Je hoeft git niet zelf te bedienen, want Claude gaat er goed mee om. Zorg alleen dat het gebeurt. Neem in je CLAUDE.md op dat Claude na elke werkende stap een commit maakt, met een beschrijving van één regel. De eerste keer vraagt git om een naam en een mailadres, die bij elke commit worden vermeld. Laat Claude ook een bestand .gitignore aanmaken met daarin .env, het bestand met je wachtwoorden en sleutels. Wat in .gitignore staat en nog niet eerder is vastgelegd, neemt git niet op in de geschiedenis. Doe dit dus meteen aan het begin.
Kijken wat er is gebeurd
Vraag Claude om de laatste commits te tonen, of typ zelf in de terminal:
git log --oneline
Bovenaan staat de nieuwste. Bij een fotograaf kan de lijst er zo uitzien:
e7d2a90 Contactformulier toegevoegd
c81f2d4 Galerij herschikt in drie kolommen
a41c9e2 Tarieven voor portretten bijgewerkt
3f2e6c1 Eerste versie van de homepage
Het commando /diff in Claude Code toont per bestand en per regel wat er sinds de laatste commit is veranderd. Over één commit kun je het ook gewoon vragen: “Wat is er veranderd in commit c81f2d4? Leg het uit in gewone taal.” Daarvoor is die code van letters en cijfers handig.
Terugdraaien zonder iets kwijt te raken
Een voorbeeld. Lotte is fotograaf. Ze liet Claude haar galerij herschikken in drie kolommen, vond het mooi op haar laptop en werkte verder aan haar contactformulier. Twee dagen later ziet ze op haar telefoon dat de galerij daar onleesbaar is geworden. Inmiddels staat er een nieuwe commit bovenop, met het contactformulier dat ze wel wil houden.
De veiligste weg is terugdraaien met een nieuwe commit. Git maakt dan een commit die precies het omgekeerde doet van de foute, en laat de rest staan. Lotte zegt tegen Claude: “Draai commit c81f2d4 terug met een nieuwe commit, en laat het contactformulier staan.” Claude gebruikt daarvoor git revert. De documentatie van git omschrijft dat als nieuwe commits vastleggen die het effect van eerdere commits ongedaan maken. De geschiedenis blijft compleet. Bedenkt Lotte zich later, dan haalt ze de galerij met drie kolommen gewoon weer terug.
Soms wil je maar één bestand terug, en ook dat zeg je gewoon: “Haal galerij.html terug uit commit a41c9e2.” En soms wil je alles weggooien wat nog niet is vastgelegd. Dat werk is daarna echt weg. Claude Code is daar voorzichtig mee. In auto mode houdt de controle commando’s als git reset --hard en git restore . standaard tegen, omdat ze werk weggooien dat niet is vastgelegd. Zeg dus precies welke wijzigingen weg mogen, en draai bij twijfel liever terug met een nieuwe commit. Hoe die controle werkt, staat in Plan mode, auto mode en toestemming.
Eén ding gaat niet vanzelf mee: je live site. Terugdraaien verandert de bestanden in je projectmap, niet wat er online staat. Na het terugdraaien moet de goede versie dus nog een keer online gezet worden. Wil je rustig nalezen hoe ongedaan maken in git werkt, dan staat er een Nederlandse uitleg in het Pro Git-boek.
De herstelpunten van Claude Code
Los van git maakt Claude Code bij elke opdracht die je geeft automatisch een herstelpunt, in het Engels een checkpoint. Daarin staat hoe de bestanden eruitzagen voordat Claude eraan begon. De lijst open je met /rewind, of door met een leeg invoervak twee keer op Esc te drukken. Je ziet dan je eerdere opdrachten. Kies er een, en geef aan wat er terug moet. Restore code zet alleen de bestanden terug en Restore conversation alleen het gesprek. Restore code and conversation doet allebei.
Handig, maar beperkt. Een herstelpunt kent alleen de wijzigingen die Claude met zijn eigen bewerkingsgereedschap in bestanden aanbracht. Verplaatste Claude een bestand met mv of wiste hij het met rm, dan helpt /rewind niet. Wat jij zelf buiten Claude Code veranderde, valt er ook buiten. Bovendien ruimt Claude Code de bewaarde versies standaard na ongeveer dertig dagen op. Anthropic schrijft in de uitleg over herstelpunten dan ook dat ze geen vervanging zijn voor git.
Herstelpunten horen bij het gesprek. Sluit je Claude Code af en ga je later verder met claude --continue, dan staan ze er nog. Anthropic wijst op nog een handig gebruik: laat Claude rustig iets uitproberen waarvan je niet weet of het goed uitpakt, zoals een heel andere indeling van je homepage. Bevalt het niet, dan ga je terug en probeer je iets anders.
Gebruik herstelpunten dus voor de stap die je net zag mislukken, en commits voor alles wat je wilt bewaren.
Wat git niet voor je doet
Git is geen back-up van je server. Staat de geschiedenis op dezelfde server als je project, en gaat die server verloren, dan ben je beide kwijt. Een kopie op een andere plek blijft nodig. Hoe je dat regelt, staat in Back-ups van je eigen server.
Git vergeet ook niets, en dat werkt twee kanten op. Staat er ooit een wachtwoord of sleutel in een commit, dan blijft die in de geschiedenis staan, ook als je hem later uit de code haalt. De enige echte oplossing is dan een nieuwe sleutel aanmaken bij de dienst in kwestie en de oude intrekken. Daarover gaat Wachtwoorden en API-sleutels in je code.
Een database hoort evenmin in git. De gegevens daarin veranderen elke dag en gaan vaak over mensen. Zet het databasebestand in je .gitignore en geef het een eigen back-up.
Maak er vandaag een gewoonte van. Vraag Claude om van je projectmap een git-repository te maken, een map waarvan git de geschiedenis bijhoudt, met een eerste commit en een .gitignore voor .env, en zet de afspraak over commits in je CLAUDE.md. Probeer daarna één keer bewust terug te draaien met een nieuwe commit, op iets onschuldigs zoals de kleur van een kop. Dan weet je hoe het voelt voordat je het echt nodig hebt.
Foto bovenaan: Tara Winstead via Pexels