Ga naar hoofdinhoud

Git reset HEAD: een uitgebreide gids

Leer wat het Git-commando reset HEAD is, hoe het werkt en welke veiligheids- en hersteloverwegingen erbij horen.
Bijgewerkt 2 okt 2026  · 10 min lezen

Verken met AI

ChatGPTClaudePerplexity

Het commando git reset is een van de krachtigste tools in Git om de status van je repository te beheren. Hiermee kunnen ontwikkelaars bepalen naar welke commit een branch verwijst, wat er gestaged blijft voor de volgende commit, en zelfs lokale geschiedenis herschrijven voordat je pusht. 

Deze gids richt zich specifiek op git reset HEAD, een veelzijdige variant die wordt gebruikt voor het unstage«n van bestanden en het beheren van de commithistorie. 

In deze gids verkennen we het commando in detail, de verschillende modi en hoe het zich verhoudt tot vaak verwarde commando's zoals git revert en git clean.

Git Reset HEAD: basisprincipes

Voordat we leren hoe je git reset HEAD toepast, bekijken we eerst de onderliggende concepten die het gedrag ervan bepalen.

Gits three-tree-architectuur

Git beheert data over drie conceptuele gebieden:

  1. Commitgeschiedenis (repository): dit is het permanente overzicht van projectsnapshots, waarin alle commits die je hebt gemaakt worden opgeslagen.
  2. Staging area (index): dit gebied bevat wijzigingen die je hebt gemarkeerd om in de volgende commit op te nemen.
  3. Working directory: dit is je daadwerkelijke bestandssysteem, waar je code bewerkt en test.

Deze drie trees werken voortdurend samen wanneer je met Git versies beheert. 

Als je bijvoorbeeld git add uitvoert, verplaats je wijzigingen van de working directory naar de staging area. Wanneer je commit, maakt Git een snapshot van de staging area en slaat die op in de commitgeschiedenis. 

Het commando git reset verplaatst de huidige branch-pointer naar een opgegeven commit, waarbij HEAD meebeweegt. In een detached HEAD-toestand verschuift het HEAD direct. Afhankelijk van de gebruikte modus werkt git reset ook de index bij en kan het de working directory wijzigen. Dit maakt het een essentiële tool voor nauwkeurig versiebeheer.

HEAD begrijpen in Git

De HEAD-pointer is Gits manier om bij te houden waar je je in de commithistorie bevindt. Meestal wijst HEAD naar de laatste commit van de branch die je hebt uitgecheckt. 

Maar hij kan ook direct naar een commit wijzen als je in een “detached HEAD”-toestand bent. Dit begrijpen is cruciaal, omdat git reset werkt door HEAD (en mogelijk de branch-referentie) naar een nieuwe commit te verplaatsen.

Hoewel branch-pointers en commit-hashes statische verwijzingen naar commits bieden, is HEAD dynamisch en beweegt mee terwijl je door de geschiedenis navigeert of van branch wisselt. 

Dit verschil herkennen helpt verwarring te voorkomen bij het resetten.

Git biedt een shorthand-notatie om relatief ten opzichte van HEAD te bewegen:

  • HEAD^ → de directe (eerste) ouder van de huidige commit
  • HEAD~2 → de grootoudercommit (twee stappen terug)

Deze shorthand maakt snelle navigatie mogelijk zonder volledige commit-hashes. Hoewel branches en tags ook naar commits kunnen verwijzen, zorgt HEAD ervoor dat commando's zoals reset of checkout weten waar je je momenteel bevindt.

Tip over ouders: HEAD~N volgt de first-parent-keten N stappen. ^ selecteert een ouder; bij merge-commits kun je specificeren welke, bijvoorbeeld HEAD^1, HEAD^2.

Git reset HEAD-modussen verkennen: soft, mixed, hard

git reset heeft drie modi, die elk bepalen hoe diep de reset je repository beïnvloedt. Ze leveren verschillende resultaten op, dus je moet weten hoe ze werken om ze goed te gebruiken.

Soft reset-modus

git reset --soft HEAD^

Allereerst is er de soft reset-modus. Met git reset --soft <target> verplaatst Git de branch-pointer achteruit (of naar de doelcommit), maar blijven alle wijzigingen gestaged in de index. 

Dit is vooral handig wanneer:

  • Je beseft dat je laatste commitbericht niet klopt
  • Je meerdere wijzigingen wilt samenvoegen tot één commit zonder gestagede content te verliezen. 

Dit commando laat de staging area intact, zodat je eenvoudig opnieuw kunt committen met een beter bericht of een verfijnde selectie.

Mixed reset-modus

git reset --mixed HEAD^

Vervolgens hebben we de mixed reset-modus, die de standaardmodus is. git reset --mixed <target> verplaatst de branch-pointer en reset de staging area zodat die overeenkomt met de doelcommit, terwijl wijzigingen in de working directory behouden blijven. 

Hiermee kun je commits herstructureren door één grote commit op te splitsen in meerdere, logische commits. Na het resetten kun je bestanden selectief stagen en opnieuw, georganiseerder committen.

Hard reset-modus

git reset --hard HEAD^

Tot slot is er de hard reset-modus, die wijzigingen aan getrackte bestanden terugdraait. git reset --hard <target> is de meest krachtige en risicovolle optie. Het reset de branch-pointer, de index en de working directory zodat die exact overeenkomen met de doelcommit. Dit gooit alle niet-gecommitete wijzigingen aan getrackte bestanden in je index en working directory weg. Niet-getrackte bestanden worden niet verwijderd (gebruik daarvoor git clean).

Hoewel dit handig kan zijn als je helemaal schoon wilt beginnen, brengt het aanzienlijke risico's met zich mee, zeker in teamomgevingen, omdat wijzigingen die niet in een commit zijn vastgelegd permanent worden verwijderd.

git reset HEAD: syntaxis en varianten

Laten we dit beter begrijpen door naar de syntaxis van het commando te kijken.

Basisstructuur van het commando

De algemene vorm van een git reset-commando is:

git reset [--soft | --mixed | --hard] <target>

De modus bepaalt hoeveel van de status van je repository wordt beïnvloed, en de target definieert naar welke commit je reset. Als je de modus weglaat, is de standaard --mixed.

Specifieke commits targeten

Commits kunnen met verschillende notaties worden verwezen:

  • Relatieve notatie zoals HEAD^ of HEAD~3
  • Expliciete commit-hashes (bijv. git reset 4a5d9c2)
  • Branchnamen of tags

Voor de veiligheid kun je git reflog gebruiken om recente HEAD-bewegingen te identificeren en per ongeluk weggegooide commits te herstellen.

Bestandsspecifieke resetoperaties

Je kunt ook alleen de staging area bijwerken voor het opgegeven bestand, terwijl de working copy ongewijzigd blijft. 

Dit is de syntaxis voor zulke operaties:

git reset HEAD -- <file>

Dit commando wordt vaak gebruikt om een bestand te “unstagen” dat per ongeluk aan de index is toegevoegd. 

Als alternatief biedt moderne Git ook git restore --staged <file> als een meer beschrijvende optie. Bestandsspecifieke resets zijn ideaal als je wilt verfijnen wat er in je volgende commit gaat zonder je bewerkingen te verliezen.

Voor meer informatie over Git-commando's, bekijk onze Git Cheat Sheet hieronder.

Git reset HEAD: praktische toepassingen en use-cases

Dit reset-commando heeft veel toepassingen binnen versiebeheer. Hier zijn enkele praktische use-cases:

1. Commitfouten corrigeren

Ontwikkelaars committen vaak te vroeg of met onvolledige wijzigingen. 

git reset --soft HEAD^ laat je de laatste commit ongedaan maken terwijl alles gestaged blijft, zodat je opnieuw en correct kunt committen zonder alle wijzigingen vanaf nul terug te draaien. 

Als alternatief maakt git reset HEAD^ de commit ongedaan terwijl wijzigingen ongestaged blijven voor fijnmaziger her-stagen.

2. Commits reorganiseren

Soms bevatten commits te veel niet-gerelateerde wijzigingen. Een mixed reset laat je een commit terugdraaien terwijl wijzigingen in de working directory blijven. 

Van daaruit kun je meerdere, kleinere commits maken die de evolutie van het project beter weerspiegelen. Evenzo, als je te vroeg hebt gemerged, geeft resetten je de kans om je geschiedenis te herstructureren voordat je die deelt.

3. Beheer van file staging

Specifieke bestanden unstage«n met git reset HEAD -- <file> zorgt ervoor dat alleen relevante bestanden samen worden gecommit. Dit ondersteunt atomische commits, die makkelijker te begrijpen en te reviewen zijn. 

Als je bijvoorbeeld een bug fixt en ook documentatie bijwerkt, zorgt het unstage«n van een van deze sets wijzigingen ervoor dat elke commit een duidelijk, enkel doel heeft.

4. Branches synchroniseren met remotes

Wanneer je lokale branch aanzienlijk afwijkt van de remote, dwingt een harde reset naar de remote branch (bijv. git reset --hard origin/main) weer gelijke tred. 

Dit kan handig zijn om lokale experimentele wijzigingen te verwerpen, maar doe dit met voorzichtigheid, omdat lokale wijzigingen hierdoor permanent worden weggegooid.

Remotegeschiedenis: git reset is lokaal. Om herschreven geschiedenis ook remote door te voeren, gebruik je git push --force-with-lease en stem je af met je team om te voorkomen dat je hun werk overschrijft.

Veiligheidsoverwegingen en risicobeheer

Aangezien git reset wijzigingen in je index en working directory kan weggooien, zijn er enkele veiligheids- en risicoaspecten om te overwegen.

Risico's van git reset HEAD gebruiken

Hoewel resets geschiedenis kunnen opschonen, kunnen ze ook werk vernietigen. 

Als je git reset HEAD zonder extra flags gebruikt, is de standaardmodus mixed reset. Dit maakt momenteel gestagede wijzigingen ongestaged (ze blijven in je working directory). Hoewel de wijzigingen in je working directory blijven, worden ze niet langer gemarkeerd voor de volgende commit.

Niet-gecommitete wijzigingen worden ongestaged; je bestandswijzigingen blijven op schijf. Als je wijzigingen hebt aangebracht in bestanden die eerder waren gestaged, zal git reset HEAD de staging area terugzetten naar de HEAD-commit en die wijzigingen effectief unstage«n.

Controles voorafgaand aan reset

Voordat je een reset uitvoert, moet je de status van je repository inspecteren om te zorgen dat alle bestanden in orde zijn.

Volg hiervoor deze stappen:

  • Voer git status uit om te bevestigen welke bestanden gestaged of gewijzigd zijn.
  • Gebruik git log of git reflog om te begrijpen waar HEAD momenteel naar wijst.
  • Vergelijk wijzigingen met git diff om te bevestigen wat je mogelijk kwijtraakt.

Deze stappen minimaliseren verrassingen en zorgen ervoor dat je doelbewust reset.

Back-up- en herstelstrategëen

Maak altijd een back-up voordat je risicovolle operaties uitvoert, zoals grote codewijzigingen.

Hier zijn enkele strategieëen die je kunt gebruiken:

  1. Stashen: sla niet-gecommitete wijzigingen tijdelijk op met git stash push -m "backup".
  2. Branching: maak een back-up-branch met git branch savepoint om de huidige geschiedenis te behouden.

Deze maatregelen maken resets minder intimiderend en geven je het vertrouwen om veilig te experimenteren.

Herstel- en undo-mechanismen

Als er een verkeerd Git-commando is gebruikt, zijn er verschillende manieren om te herstellen.

Herstellen met git reflog

git reflog registreert elke beweging van HEAD en is een redder in nood na per ongeluk resetten. Als je een commit kwijtraakt, voer je eenvoudig uit:

git reflog
git reset --hard <commit-id>

Zo kun je weggegooide werkzaamheden herstellen zolang de commit niet door garbage collection is opgeruimd.

Alternatieve herstelstrategëen

Naast reflog kun je vertrouwen op stashes en back-up-branches. Stashes leggen niet-gecommit werk vast, terwijl branches volledige commithistories behouden. In samenwerkingsomgevingen kun je vaak herstellen van fouten door de juiste status van de remote repository op te halen.

Geavanceerd gebruik en best practices

Het commando git reset HEAD kan ook worden gebruikt voor geavanceerdere operaties.

1. Interactieve staging-workflows

git add --patch combineren met resets op bestandsniveau geeft je maximale controle over wat er in elke commit terechtkomt. Deze workflow zorgt voor atomische en gefocuste commits, wat de leesbaarheid verbetert en de kans op niet-gerelateerde wijzigingen verkleint.

2. Commitberichten verfijnen

Als je een typefout ontdekt of een duidelijker commitbericht wilt geven, kun je met een soft reset de commit herschrijven zonder de code te wijzigen. Dit is een nette manier om je geschiedenis betekenisvol te houden.

3. Branchbeheer en geschiedenis herschrijven

Reset kan ook strategisch worden gebruikt voor het mergen om de commithistorie op te schonen. Ontwikkelaars gebruiken resets vaak om commits te squashen of te reorganiseren, zodat branches een schonere historie hebben wanneer ze in de mainline worden geïntegreerd.

4. Protocol voor samenwerken

In teams zijn duidelijke afspraken essentieel. Vermijd het resetten van gedeelde branches en communiceer met anderen wanneer force-pushen nodig is. 

Deze protocollen voorkomen verwarring en gebroken geschiedenissen in gedeelde repositories.

Gerelateerde commando's en extra tools

Git-commando's worden vaak in combinatie gebruikt. Hier zijn enkele gerelateerde commando's die op een vergelijkbare manier werken als git reset HEAD.

git clean gebruiken om niet-getrackte bestanden te verwijderen

Soms vervuilen niet-getrackte bestanden je working directory. git clean verwijdert ze, maar wees voorzichtig—dit is onomkeerbaar. Voer git clean -n uit voor een dry-run voordat je daadwerkelijk bestanden verwijdert. In combinatie met git reset kan dit een repository terugbrengen naar een schone staat.

git revert gebruiken voor publieke historie

Als je aan gedeelde repositories werkt, kun je overwegen git revert te gebruiken in plaats van git reset om commits ongedaan te maken. git revert maakt een nieuwe commit die de wijzigingen van een eerdere commit tenietdoet, waardoor de integriteit van de geschiedenis behouden blijft. Daarentegen herschrijft git reset de geschiedenis, wat teamgenoten kan verstoren.

Snelle vergelijking:

  • reset → herschrijft geschiedenis.
  • revert → maakt een nieuwe commit die een vorige ongedaan maakt.
  • restore → past werkbestanden aan zonder de geschiedenis te wijzigen.

Conclusie

Met git reset HEAD krijgen ontwikkelaars fijnmazige controle over de status van hun repository. Het is krachtig, maar je moet het voorzichtig gebruiken, vooral in samenwerkingssettings waar het herschrijven van geschiedenis tot conflicten kan leiden. 

Deze basisfunctionaliteit biedt veel mogelijkheden om met repositories te werken en ongewenste wijzigingen terug te draaien. Wil je meer leren over Git? Bekijk dan onze GitHub Foundations skill track of de cursus Foundations of Git.

Git reset HEAD: veelgestelde vragen

Wat zijn best practices voor het gebruik van git reset --hard?

Gebruik git reset --hard spaarzaam, want het gooit wijzigingen in zowel je staging area als je working directory permanent weg. Controleer altijd dubbel of niet-gecommitete wijzigingen niet nodig zijn voordat je ze verwijdert. Commit of stash je werk voordat je het commando uitvoert, zodat je een vangnet hebt als je te agressief reset.

Hoe kan ik herstellen van een per ongeluk uitgevoerde git reset --hard?

Herstel hangt af van of de commit elders werd gerefereerd. Git’s reflog kan vaak helpen: met git reflog zie je een geschiedenis van recente HEAD-posities, en je kunt git checkout of git reset gebruiken om terug te gaan naar de verloren commit. Als je je wijzigingen niet hebt gecommit vóór de reset, is het niet-gecommitete werk meestal niet te herstellen.

Wat zijn de verschillen tussen git reset --soft, --mixed en --hard?

--soft verplaatst HEAD naar een nieuwe commit maar houdt alle wijzigingen gestaged. --mixed (de standaard) verplaatst HEAD en maakt de staging area leeg, maar laat de working directory ongemoeid. --hard verplaatst HEAD, leegt de staging area en overschrijft de working directory, waardoor niet-gecommitete wijzigingen volledig worden gewist.

Hoe beïnvloedt git reset --hard niet-gecommitete wijzigingen?

git reset --hard verwijdert niet-gecommitete wijzigingen. Alle aanpassingen in je working directory of staging area die niet gecommit zijn, raak je kwijt wanneer je git reset --hard uitvoert.

Kan ik git reset --hard gebruiken op een remote repository?

Nee. git reset --hard heeft alleen invloed op je lokale repository. Om een remote branch te wijzigen, moet je je lokale wijzigingen pushen met een force push (git push --force), wat de geschiedenis voor iedereen die aan die branch werkt kan herschrijven. Doe dit alleen met duidelijke communicatie naar je team, omdat het samenwerking kan verstoren.


Austin Chia's photo
Author
Austin Chia
LinkedIn

Ik ben Austin, een blogger en techschrijver met jarenlange ervaring als zowel datascientist als data-analist in de gezondheidszorg. Ik begon mijn techreis met een achtergrond in biologie en help nu anderen dezelfde overstap te maken via mijn techblog. Mijn passie voor technologie heeft geleid tot schrijfbijdragen aan tientallen SaaS-bedrijven, waarmee ik anderen inspireer en mijn ervaringen deel.

Onderwerpen
Git

Topcursussen bij DataCamp

Leerpad

Git-basisprincipes

7 uur
Leer versiebeheer met Git, van de basis tot geavanceerde werkwijzen. Houd wijzigingen bij, beheer opslagplaatsen en werk efficiënt samen.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken