Git bisect is awesome. Before I discovered it, I was manually bisecting the codebase, and stubbing out the missing half.
git bisect is "temporal bisection", i.e. you delete half of a time interval. The manual bisect is kinda-sorta "spatial" in the sense that you delete half a region of code. the two things work by similar principles, and their problem domains overlap -- but they are not the same.
I've done the manual equivalent in perforce as well.