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.
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 goodIndsnæ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 resetHå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 skipAutomatisering 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.(undtagen1-127125): 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
fiTjek 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
goodellerbad. - Brug
git bisect skiptil commits, der ikke kan testes. - Automatisér med
git bisect runfor hurtig fejlsøgning uden manuel indgriben. - Afslut altid med
git bisect reset.
God fornøjelse med fejlsøgningen!
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
- Gendannelse af mistede commits og branches
- Fejlfinding med Git Bisect
- Optimering af Git-repositoryets ydeevne
- Redning af arbejde med Reflog og Stash