Geavanceerde Git: monorepo's, submodules en werkstromen · Les

Verloren commits en branches herstellen

Beheers geavanceerde hersteltechnieken met `git reflog` en andere tools om verloren werk en branches te herstellen

Les 1 van 411 stappen

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 HEAD n 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, reset of checkout).

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 abcdefg

Scenario 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-work

Verder 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 a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1

Voorkomen 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 .git zelf.

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 fsck gebruiken 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!

Gratis beginnen

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

  1. Verloren commits en branches herstellen
  2. Debuggen met Git Bisect
  3. Prestaties van Git-repositories optimaliseren
  4. Werk redden met de Reflog en Stash
← Terug naar Geavanceerde Git: monorepo's, submodules en werkstromen