Using git bisect to track down bugs
Something in your application worked a few days ago, and now it doesn’t. Aararrgh! We’ve all been there. Nobody has any idea which change broke it. You use
git log -p to thrawl through the recent changes, but nothing stands out. What to do, what to do? Use git bisect to minimize or completely automate finding the commit that broke it!
git bisect start to begin. Since the current version is bad, you run
git bisect bad to let git know.
Now you need to tell it which commit/version is the latest “good one” - often that’d be the last released tag, so for example
git bisect good v25.0.3.
git will now decide on a commit you should test, check it out and tell you how many are left.
If you are just testing manually, you’ll now manually run your tests and tell git if it’s good or bad. In our web environment that’d often involve restarting the application (just to make sure) and then running the tests.
When you know if this revision has the bug or not, you run
git bisect bad if it’s bad and
git bisect good if things are good and after a little while of that git will tell you which commit introduced the bug!
If you can do the ‘is it good or bad’ test automatically, you can run ‘git bisect run command’ (where command is
prove t/sometest.t or a custom shell script) and git will figure it out automatically while you get coffee or go to lunch!