📖 Scenario: You are working on a software project using Git. Suddenly, a bug appears in your code. You want to find out which commit introduced this bug so you can fix it quickly.
🎯 Goal: Learn how to use git bisect to find the commit that introduced a bug by marking commits as good or bad and letting Git narrow down the search.
📋 What You'll Learn
Use git bisect start to begin the bisect session
Mark a known bad commit with git bisect bad
Mark a known good commit with git bisect good <commit>
Use git bisect reset to end the bisect session
💡 Why This Matters
🌍 Real World
Finding the exact commit that introduced a bug helps developers fix problems faster and understand code changes better.
💼 Career
Software developers and DevOps engineers use git bisect to debug code efficiently in real projects.
Progress0 / 4 steps
1
Start bisect and mark the bad commit
Run git bisect start to begin the bisect session, then mark the current commit as bad using git bisect bad.
Git
Hint
First, start bisecting with git bisect start. Then tell Git that the current commit has the bug with git bisect bad.
2
Mark a known good commit
Mark a known good commit where the bug was not present using git bisect good <commit-hash>. Use the commit hash abc1234 as the good commit.
Git
Hint
Use the exact commit hash abc1234 with git bisect good to tell Git this commit is bug-free.
3
Test commits and mark them good or bad
After Git checks out a commit, test if the bug is present. Then mark the commit as bad with git bisect bad if the bug is there, or good with git bisect good if it is not. Write the command to mark the current commit as bad.
Git
Hint
Use git bisect bad to mark the current commit as bad after testing.
4
Reset bisect after finding the bad commit
Once Git finds the first bad commit, end the bisect session by running git bisect reset.
Git
Hint
Use git bisect reset to stop bisecting and return to your original branch.
Practice
(1/5)
1. What is the main purpose of git bisect?
easy
A. To delete old commits from history
B. To merge two branches automatically
C. To create a new branch from the current commit
D. To find the first commit that introduced a bug
Solution
Step 1: Understand the role of git bisect
Git bisect helps identify which commit introduced a bug by testing commits between a known good and a bad commit.
Step 2: Compare with other git commands
Merging branches, deleting commits, or creating branches are different git operations unrelated to bisect.
Final Answer:
To find the first commit that introduced a bug -> Option D
Quick Check:
git bisect = find bug commit [OK]
Hint: Bisect narrows down bug commit by testing between good and bad [OK]
Common Mistakes:
Confusing bisect with merge or branch commands
Thinking bisect deletes commits
Assuming bisect creates branches
2. Which command correctly starts a bisect session assuming HEAD is bad and v1.0 is good?
easy
A. git bisect start v1.0 HEAD
B. git bisect start HEAD v1.0
C. git bisect begin HEAD v1.0
D. git bisect init v1.0 HEAD
Solution
Step 1: Recall git bisect start syntax
The correct syntax is git bisect start <bad> <good>, where the first argument is the bad commit and the second is the good commit.
Step 2: Match the given commits
Since HEAD is bad and v1.0 is good, the command is git bisect start HEAD v1.0.
Final Answer:
git bisect start HEAD v1.0 -> Option B
Quick Check:
git bisect start bad good = start [OK]
Hint: Start bisect with bad commit first, then good commit [OK]
Common Mistakes:
Reversing good and bad commits in the command
Using incorrect command like bisect begin or init
Omitting the start keyword
3. Given this bisect session output:
Bisecting: 3 revisions left to test after this (roughly 2 steps)
Testing commit abc1234
If you run git bisect good and then git bisect bad on the next commit, what will git do next?
medium
A. Git will narrow down the range and checkout the next commit to test
B. Git will end the bisect session immediately
C. Git will reset to the original branch without changes
D. Git will throw an error because you cannot mark good then bad consecutively
Solution
Step 1: Understand bisect workflow
Marking commits as good or bad tells git which side of the commit range to keep searching. After marking, git checks out the next commit to test.
Step 2: Analyze the given commands
Marking one commit good, then the next bad, narrows the search range. Git continues bisecting until it finds the first bad commit.
Final Answer:
Git will narrow down the range and checkout the next commit to test -> Option A
Quick Check:
Mark good/bad -> git picks next commit [OK]
Hint: Mark commits good/bad to let git pick next test commit [OK]
Common Mistakes:
Thinking bisect ends after one good and one bad mark
Assuming git resets automatically after marking
Believing marking good then bad consecutively causes error
4. You started a bisect session but accidentally marked a good commit as bad. What is the best way to fix this?
medium
A. Edit the .git/BISECT_LOG file manually to fix the mistake
B. Run git bisect skip on the wrong commit
C. Run git bisect good on the same commit to correct it
D. Run git bisect reset and start over
Solution
Step 1: Understand bisect marking correction
Git bisect allows re-marking a commit to correct its status if marked incorrectly.
Step 2: Correct the marking
Run git bisect good on the commit you accidentally marked as bad to update the bisect state.
Final Answer:
Run git bisect good on the same commit to correct it -> Option C
Quick Check:
Re-mark good/bad to correct [OK]
Hint: Re-mark the commit with git bisect good to fix [OK]
Common Mistakes:
Thinking you must reset instead of re-marking
Editing internal git files manually
Using skip to fix a marking error
5. You have a large project with 1000 commits. You know commit abc123 is good and def456 is bad. You want to find the first bad commit using git bisect. Which sequence of commands correctly performs this task?
hard
A. git bisect start def456 abc123; git bisect bad def456; git bisect good abc123; test commits; git bisect reset
B. git bisect start abc123 def456; git bisect bad abc123; git bisect good def456; test commits; git bisect reset
C. git bisect start def456 abc123; git bisect good def456; git bisect bad abc123; test commits; git bisect reset
D. git bisect start abc123 def456; git bisect good def456; git bisect bad abc123; test commits; git bisect reset
Solution
Step 1: Start bisect with bad then good commit
The correct syntax is git bisect start <bad> <good>. Since def456 is bad and abc123 is good, the command is git bisect start def456 abc123.
Step 2: Mark the known commits correctly
Mark the bad commit with git bisect bad def456 and the good commit with git bisect good abc123. Then test intermediate commits as git suggests.
Step 3: Finish bisect session
After finding the first bad commit, run git bisect reset to return to the original branch.
Final Answer:
git bisect start def456 abc123; git bisect bad def456; git bisect good abc123; test commits; git bisect reset -> Option A
Quick Check:
Start with bad then good, mark correctly, reset [OK]
Hint: Start bisect with bad then good commit, mark accordingly [OK]
Common Mistakes:
Reversing good and bad commits in start command
Marking commits with wrong status
Skipping reset after bisect finishes
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.