Avancerad Git: monorepon, submoduler och arbetsflöden · Lektion

Återställa förlorade commits och brancher

Bemästra avancerade återställningstekniker med `git reflog` och andra verktyg för att återställa förlorat arbete och förlorade brancher.

Lektion 1 av 411 steg

Återställa förlorade commits och brancher är en gratis lektion i Avancerad Git: monorepon, submoduler och arbetsflöden på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Avancerad Git: monorepon, submoduler och arbetsflöden, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Avancerad Git: monorepon, submoduler och arbetsflöden innehåller totalt 4 lektioner.

Vad betyder ”förlorad” i Git?

I Git innebär förlorat arbete ofta att det bara är tillfälligt oåtkomligt, inte permanent borttaget. Gits interna mekanismer bevarar en detaljerad historik, vilket gör återställning möjlig.

I den här lektionen får du lära dig avancerade tekniker för att återställa commits och brancher och även lösa besvärliga situationer som ett detached HEAD.

Reflog: ditt yttersta säkerhetsnät

Du känner kanske redan till att git reflog är ett kraftfullt verktyg. Det registrerar nästan varje ändring av din HEAD och skapar i praktiken en lokal historik över repots tillstånd.

Tänk på det som en loggbok över var din HEAD-pekare har befunnit sig, även efter reset, merge och checkout. Det är ditt första verktyg vid återställning.

Tolka reflog-poster

Varje post i din reflog har ett specifikt format. Att förstå det är nyckeln till att hitta det du behöver:

  • HEAD@{n}: Anger HEAD:s tillstånd för 'n' steg sedan.
  • Commit-hashen: Den faktiska SHA-1-identifieraren för committen.
  • Åtgärden: En beskrivning av vad som hände (t.ex. commit, reset eller checkout).

Genom att gå igenom dessa poster kan du hitta exakt den commit du vill återställa.

Scenario 1: återställ en förlorad commit

Ett vanligt scenario är att du råkar använda git reset --hard och förlorar ditt senaste arbete. Få inte panik! Din commit finns fortfarande i reflog.

Du kan hitta hashen för den ”förlorade” committen i reflog och sedan använda git reset --hard för att flytta den aktuella branchens HEAD tillbaka till den specifika committen.

Exempel: återställ till en reflog-post

Vi simulerar att en commit förloras och återställer den sedan. Vi skapar en commit, ”förlorar” den med en hard reset och använder därefter reflog för att få tillbaka den.

Kör dessa kommandon i din 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: återuppliva en borttagen branch

Råkade du ta bort en branch med git branch -D my-feature? Git förstör inte committerna direkt, utan tar bara bort pekaren.

Använd git reflog för att hitta den senaste commit som den borttagna branchen pekade på. När du har commit-hashen kan du helt enkelt återskapa branchen från den punkten.

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!

Åtgärda ett detached HEAD-tillstånd

Ett ”detached HEAD” uppstår när din HEAD pekar direkt på en commit i stället för på en namngiven branch. Commits som skapas i detta tillstånd tillhör ingen branch om du inte uttryckligen skapar en.

Åtgärda det genom att skapa en ny branch vid den aktuella positionen för HEAD med git branch <new-branch-name> och sedan byta till den med 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

Bortom reflog: `git fsck`

För ännu djupare återställning eller integritetskontroller är git fsck (kontroll av filsystemet) rätt verktyg. Det verifierar integriteten i ert Git-repositorium och kan hitta ”hängande” objekt som inte refereras av någon ref (gren, tagg eller reflog-post).

Med git fsck --lost-found kan dessa orefererade objekt (commits, blobs) flyttas till katalogen .git/lost-found/, så att ni får möjlighet att granska och eventuellt återställa dem manuellt.

git fsck --full --unreachable
# Expected output might look like:
# dangling commit e1f2g3h4i5j6k7l8m9n0o1p2q3r4s5t6u7v8w9x0
# dangling blob a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1

Förebyggande åtgärder är avgörande

Även om Git erbjuder robusta återställningsmöjligheter är det alltid bättre att förebygga dataförlust:

  • Commit ofta: Små, frekventa commits innebär mindre att förlora.
  • Push ofta: Fjärrrepositorier fungerar som säkerhetskopior.
  • Beskrivande meddelanden: Gör det enklare att identifiera commits i reflog.
  • Säkerhetskopiera .git: För kritiska projekt kan ni överväga att säkerhetskopiera själva katalogen .git.

Snabbkontroll: återställning med reflog

Ni har råkat ta bort grenen feature-x. Vilka kommandon är viktiga för att hitta och återställa dess senaste commit?

Ni behärskar återställning!

Grattis! Ni behärskar nu avancerade tekniker för återställning i Git. Ni kan nu:

  • Identifiera och återställa ”förlorade” commits med git reflog.
  • Återuppliva grenar som råkat tas bort.
  • Navigera i och åtgärda ett tillstånd med ”detached HEAD”.
  • Använda git fsck för djupare granskning och återställning av repositoriet.

Kom ihåg att regelbundet pusha ert arbete till fjärrrepositorier som ert främsta skydd mot dataförlust!

Gratis att börja

Lär dig Avancerad Git: monorepon, submoduler och arbetsflöden med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Återställa förlorade commits och brancher” gratis?

Ja – hela texten till ”Återställa förlorade commits och brancher” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Avancerad Git: monorepon, submoduler och arbetsflöden, kan Ni uppgradera till CoddyKit PRO. Kursen i Avancerad Git: monorepon, submoduler och arbetsflöden innehåller totalt 4 lektioner.

Vad lär jag mig i ”Återställa förlorade commits och brancher”?

Bemästra avancerade återställningstekniker med `git reflog` och andra verktyg för att återställa förlorat arbete och förlorade brancher. Ni övar på Avancerad Git: monorepon, submoduler och arbetsflöden med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Avancerad Git: monorepon, submoduler och arbetsflöden?

Du behöver inga förkunskaper. Utbildningen i Avancerad Git: monorepon, submoduler och arbetsflöden på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Återställa förlorade commits och brancher”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Avancerad Git: monorepon, submoduler och arbetsflöden-lektionen?

Ja. Varje Avancerad Git: monorepon, submoduler och arbetsflöden-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Återställa förlorade commits och brancher
  2. Felsökning med Git Bisect
  3. Optimera Git-kodarkivens prestanda
  4. Rädda arbete med Reflog och Stash
← Tillbaka till Avancerad Git: monorepon, submoduler och arbetsflöden