Verloren commits en branches herstellen
Beheers geavanceerde hersteltechnieken met `git reflog` en andere tools om verloren werk en branches te herstellen
Verloren commits en branches herstellen is een gratis Geavanceerde Git: monorepo's, submodules en werkstromen-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Geavanceerde Git: monorepo's, submodules en werkstromen. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Geavanceerde Git: monorepo's, submodules en werkstromen bevat in totaal 4 lessen.
Wat betekent 'verloren' in Git?
In Git betekent werk verliezen vaak dat het tijdelijk buiten direct bereik is, niet dat het permanent is verwijderd. De interne mechanismen van Git bewaren een gedetailleerde geschiedenis, waardoor herstel mogelijk is.
In deze les leer je geavanceerde technieken om commits en branches te herstellen en lastige situaties zoals een detached HEAD op te lossen.
Reflog: je ultieme vangnet
Je weet misschien al dat git reflog een krachtig hulpmiddel is. Het registreert vrijwel elke wijziging aan je HEAD en maakt zo effectief een lokale geschiedenis van de toestand van je repository.
Zie het als een logboek van de plekken waar je HEAD-pointer is geweest, ook na resets, merges en checkouts. Dit is je eerste halte bij herstel.
Reflog-vermeldingen ontcijferen
Elke vermelding in je reflog heeft een specifieke indeling. Als je die begrijpt, kun je vinden wat je nodig hebt:
HEAD@{n}: geeft de toestand van HEADn
stappen geleden aan.- De commit-hash: de werkelijke SHA-1-identificatie van de commit.
- De actie: een beschrijving van wat er is gebeurd (bijvoorbeeld
commit,resetofcheckout).
Door deze vermeldingen te scannen, kun je precies de commit vinden die je wilt herstellen.
Scenario 1: een verloren commit herstellen
Een veelvoorkomend scenario: je gebruikt per ongeluk git reset --hard en verliest je laatste werk. Geen paniek! Je commit staat nog in de reflog.
Je kunt de commit-hash van je 'verloren' commit in de reflog vinden en vervolgens git reset --hard gebruiken om de HEAD van je huidige branch terug naar die specifieke commit te verplaatsen.
Voorbeeld: terugzetten naar een reflog-vermelding
Laten we simuleren dat we een commit verliezen en deze daarna herstellen. We maken een commit, 'verliezen' deze met een hard reset en gebruiken vervolgens reflog om deze terug te krijgen.
Voer deze opdrachten uit in je terminal:
git init
echo "Initial content" > file.txt
git add .
git commit -m "Initial commit"
echo "Second change" >> file.txt
git add .
git commit -m "Second commit (to be lost)"
git reflog # Note the commit hash for "Second commit"
git reset --hard HEAD~1 # This 'loses' the second commit
git reflog # See the reset action
# To recover the 'Second commit', find its hash from the reflog output above.
# For example, if the hash was 'abcdefg':
# git reset --hard abcdefgScenario 2: een verwijderde branch terughalen
Per ongeluk een branch verwijderd met git branch -D my-feature? Git vernietigt de commits niet meteen; het verwijdert alleen de pointer.
Gebruik git reflog om de laatste commit te vinden waarnaar je verwijderde branch wees. Zodra je de commit-hash hebt, kun je de branch eenvoudig vanaf dat punt opnieuw maken.
git checkout -b feature-a
echo "Work for feature A" > feature.txt
git add .
git commit -m "Working on feature A"
git checkout main
git branch -D feature-a # Uh oh, deleted!
git reflog # Find the commit hash for 'feature-a'
# For example, if the hash was '1234567':
# git branch feature-a 1234567
# git checkout feature-a # Your branch is back!Een detached HEAD-toestand herstellen
Een 'detached HEAD' ontstaat wanneer je HEAD rechtstreeks naar een commit wijst en niet naar een benoemde branch. Commits die in deze toestand worden gemaakt, maken geen deel uit van een branch, tenzij je er expliciet een maakt.
Om dit op te lossen, maak je eenvoudig een nieuwe branch op de huidige positie van je HEAD met git branch <new-branch-name> en schakel je er vervolgens naartoe met git checkout <new-branch-name>.
git init
echo "Start" > a.txt
git add .
git commit -m "Initial commit"
git checkout HEAD~1 # This detaches HEAD
echo "New content" > b.txt
git add .
git commit -m "Lost commit in detached state"
# To recover this 'lost' commit:
# git branch my-recovered-work
# git checkout my-recovered-workVerder dan reflog: `git fsck`
Voor nog grondiger herstel of integriteitscontroles is git fsck (controle van het bestandssysteem) je hulpmiddel. Hiermee controleer je de integriteit van je Git-opslagplaats en kun je zwevende objecten vinden waarnaar geen enkele ref verwijst (branch, tag of reflog-vermelding).
Met git fsck --lost-found kun je deze objecten waarnaar niet wordt verwezen (commits, blobs) verplaatsen naar de map .git/lost-found/. Zo krijg je de kans om ze te inspecteren en mogelijk handmatig te herstellen.
git fsck --full --unreachable
# Expected output might look like:
# dangling commit e1f2g3h4i5j6k7l8m9n0o1p2q3r4s5t6u7v8w9x0
# dangling blob a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1Voorkomen is beter dan genezen
Hoewel Git krachtige herstelmogelijkheden biedt, is gegevensverlies voorkomen altijd beter:
- Commit vaak: Kleine, regelmatige commits betekenen dat je minder kunt kwijtraken.
- Push regelmatig: Externe opslagplaatsen fungeren als back-ups.
- Beschrijvende berichten: Hiermee kun je commits in de reflog herkennen.
- Maak een back-up van .git: Overweeg voor kritieke projecten een back-up te maken van de map
.gitzelf.
Korte controle: herstel met reflog
Je hebt per ongeluk je branch feature-x verwijderd. Welke opdrachten zijn essentieel om de laatste commit ervan te vinden en te herstellen?
Herstel volledig beheerst
Gefeliciteerd! Je beheerst nu geavanceerde hersteltechnieken in Git. Je kunt nu:
- ‘Verloren’ commits identificeren en herstellen met
git reflog. - Per ongeluk verwijderde branches opnieuw tot leven brengen.
- Navigeren in en herstellen van een ‘detached HEAD’-status.
git fsckgebruiken voor grondigere inspectie en herstel van de opslagplaats.
Vergeet niet om je werk regelmatig naar externe opslagplaatsen te pushen. Dat is je belangrijkste bescherming tegen gegevensverlies!
Leer Geavanceerde Git: monorepo's, submodules en werkstromen met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Verloren commits en branches herstellen” gratis?
Ja — de volledige tekst van “Verloren commits en branches herstellen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Geavanceerde Git: monorepo's, submodules en werkstromen wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Geavanceerde Git: monorepo's, submodules en werkstromen bevat in totaal 4 lessen.
Wat leer ik in “Verloren commits en branches herstellen”?
Beheers geavanceerde hersteltechnieken met `git reflog` en andere tools om verloren werk en branches te herstellen Je oefent met Geavanceerde Git: monorepo's, submodules en werkstromen door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Geavanceerde Git: monorepo's, submodules en werkstromen te beginnen?
Ervaring vooraf is niet nodig. Geavanceerde Git: monorepo's, submodules en werkstromen op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Verloren commits en branches herstellen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Geavanceerde Git: monorepo's, submodules en werkstromen?
Ja. Elke les over Geavanceerde Git: monorepo's, submodules en werkstromen bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Verloren commits en branches herstellen
- Debuggen met Git Bisect
- Prestaties van Git-repositories optimaliseren
- Werk redden met de Reflog en Stash