Script Valley
Debugging: A Systematic Approach
Reading Code to Find BugsLesson 2.5

How to use git blame and git log to find when a bug was introduced

git blame, git log, git bisect, commit history investigation, blame workflow

Git as a Debugging Tool

When a bug exists in code you did not write, or appeared after a series of changes, git history is your roadmap. Three commands cover most cases: git blame, git log, and git bisect.

git blame and git log

# Find who last changed each line of a file
git blame src/cart.js

# See commits that touched a specific function
git log -p --all -S 'applyDiscount' src/cart.js

# Find commits that changed a specific line range
git log -L 42,55:src/cart.js

git bisect: Binary Search for Bugs

If you know a commit where the code worked and a commit where it broke, git bisect performs a binary search through history to find the exact commit that introduced the fault.

git bisect start
git bisect bad                  # current commit is broken
git bisect good v2.1.0          # this version worked
# Git checks out midpoint commit
# You test, then run:
git bisect good   # or: git bisect bad
# Repeat until git identifies the fault commit
git bisect reset  # restore HEAD when done

Once bisect identifies the commit, read that commit diff. The fault is in those changed lines. git show with the commit hash shows the full diff.

How to use git blame and git log to find when a bug was introduced — Reading Code to Find Bugs — Debugging: A Systematic Approach — Script Valley — Script Valley