Avanceret Git: Monorepoer, undermoduler og arbejdsgange · Lektion

Fejlfinding med Git Bisect

Brug `git bisect` til effektivt at finde det præcise commit, der introducerede en fejl, og spar værdifuld tid på fejlfinding.

Lektion 2 af 411 trin

Fejlfinding med Git Bisect er en gratis Avanceret Git: Monorepoer, undermoduler og arbejdsgange-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Avanceret Git: Monorepoer, undermoduler og arbejdsgange, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Avanceret Git: Monorepoer, undermoduler og arbejdsgange-kurset indeholder 4 lektioner i alt.

Hvad er Git Bisect?

Forestil dig, at der opstår en fejl i dit projekt, men at du ikke ved, hvilken nylig ændring der forårsagede den. Det kan tage meget lang tid manuelt at kontrollere hvert commit!

git bisect er en effektiv Git-kommando, der bruger en binærsøgningsalgoritme til hurtigt at finde det præcise commit, der introducerede en fejl.

Fordelen ved binærsøgning

Hvordan kan git bisect arbejde så hurtigt? Det minder om en omgang "varm eller kold" med din commit-historik.

  • Du fortæller Git, hvilket commit du ved er dårligt (det indeholder fejlen).
  • Du fortæller Git, hvilket commit du ved er godt (fra før fejlen eksisterede).
  • Git vælger et commit omtrent midt imellem og beder dig teste det.
  • Ud fra din tilbagemelding halverer Git søgeområdet og gentager processen, indtil synderen er fundet.

Start din Bisect-søgning

Først skal du fortælle Git, at du starter en bisect-session. Derefter markerer du det kendte "dårlige" (fejlbehæftede) commit og et kendt "godt" (fungerende) commit.

Du kan bruge commit-hashværdier, grennavne eller tags.

git bisect start
git bisect bad HEAD
git bisect good <known_good_commit_hash>

Den gentagne proces: Test og markér

Når du har defineret dine gode og dårlige commits, checker Git automatisk et commit ud midt i dette interval. Din opgave er at teste koden i dette commit.

  • Hvis fejlen er til stede, skal du markere det som dårligt.
  • Hvis fejlen IKKE er til stede, skal du markere det som godt.

Git går derefter videre til det næste commit og halverer det resterende søgeområde.

Markering af et commit

Når du har testet det aktuelt udcheckede commit, skal du bruge disse kommandoer til at fortælle Git, om det er godt eller dårligt:

  • Sådan markeres det aktuelle commit som dårligt: git bisect bad
  • Sådan markeres det aktuelle commit som godt: git bisect good

Git checker derefter automatisk det næste commit ud, der skal testes.

git bisect bad
# OR
git bisect good

Indsnævring af problemet

Du gentager processen med at teste og markere. For hvert trin kommer git bisect tættere på det ene commit, der introducerede fejlen. Det er meget hurtigere end at kontrollere commits ét ad gangen!

For et interval på 100 commits kræver det højst 7 tests (log2(100) ≈ 6,64).

Synderen er fundet

Til sidst indsnævrer git bisect intervallet til ét enkelt commit. Derefter rapporterer det det første fundne "dårlige" commit, som er det commit, der introducerede fejlen!

Når du har fundet fejlen, er det vigtigt at afslutte bisect-sessionen, så dit arkiv vender tilbage til sin oprindelige tilstand (som regel den gren, du var på, da du startede).

git bisect reset

Håndtering af commits, der ikke kan testes

Nogle gange lander git bisect på et commit, der ikke kan testes (f.eks. fordi det ikke kan kompileres, eller fordi afhængighederne er ødelagt). I sådanne tilfælde kan du fortælle Git, at det skal springes over:

git bisect skip

Git vælger derefter et andet commit, der skal testes, og udelukker det oversprungne commit fra det mulige fejlsøgningsinterval.

git bisect skip

Automatisering med Git Bisect Run

Hvis du vil foretage fejlsøgningen endnu hurtigere, kan du automatisere testprocessen med git bisect run. Denne kommando tager et script, der udfører testen og afslutter med bestemte koder:

  • 0: Commit'et er godt.
  • 1-127 (undtagen 125): Commit'et er dårligt.
  • 125: Commit'et skal springes over (f.eks. fordi det ikke kan bygges).

Git kører derefter automatisk scriptet for hvert commit, indtil fejlen er fundet.

#!/bin/bash

# Example test script for git bisect run
# Replace 'make test' with your actual test command

if make test;
then
  exit 0 # Tests passed, commit is good
else
  exit 1 # Tests failed, commit is bad
fi

Tjek af Bisect-arbejdsgangen

Hvilke af følgende kommandoer er nødvendige, når du udfører en manuel git bisect for at finde en fejl?

Fejlfindingsboost

Du har lært git bisect! Dette effektive værktøj forvandler fejlsøgning fra en kedelig opgave til en effektiv, systematisk proces ved hjælp af binærsøgning.

  • Start med git bisect start, og definér gode og dårlige commits.
  • Test og markér commits som good eller bad.
  • Brug git bisect skip til commits, der ikke kan testes.
  • Automatisér med git bisect run for hurtig fejlsøgning uden manuel indgriben.
  • Afslut altid med git bisect reset.

God fornøjelse med fejlsøgningen!

Gratis at komme i gang

Lær Avanceret Git: Monorepoer, undermoduler og arbejdsgange med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Fejlfinding med Git Bisect” gratis?

Ja — hele teksten til “Fejlfinding med Git Bisect” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Avanceret Git: Monorepoer, undermoduler og arbejdsgange-kurset, skal du opgradere til CoddyKit PRO. Avanceret Git: Monorepoer, undermoduler og arbejdsgange-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Fejlfinding med Git Bisect”?

Brug `git bisect` til effektivt at finde det præcise commit, der introducerede en fejl, og spar værdifuld tid på fejlfinding. Du øver dig i Avanceret Git: Monorepoer, undermoduler og arbejdsgange med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Avanceret Git: Monorepoer, undermoduler og arbejdsgange?

Der kræves ingen tidligere erfaring. Avanceret Git: Monorepoer, undermoduler og arbejdsgange på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Fejlfinding med Git Bisect”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Avanceret Git: Monorepoer, undermoduler og arbejdsgange-lektion?

Ja. Alle Avanceret Git: Monorepoer, undermoduler og arbejdsgange-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Gendannelse af mistede commits og branches
  2. Fejlfinding med Git Bisect
  3. Optimering af Git-repositoryets ydeevne
  4. Redning af arbejde med Reflog og Stash
← Tilbage til Avanceret Git: Monorepoer, undermoduler og arbejdsgange