Context Navigation

Binary Searching

Sometimes, you may be asked to narrow the list of possible revisions.
The quickest way to do this is a 'binary search'.
In short, a binary search involves testing the middle value to see which half of the data contains the answer.
As you repeat this test, the range of possible revisions shrinks by half each time. To note, some version control systems such as hg and git call it 'bisect'.

Here is an example: revision 38000 fails to boot, last known good revision is 34000. That's a whopping 4,000 revisions to consider!

Pass One

middle = 36000 (38000 - 34000)

boot = success

the issue is somewhere between 36000 and 38000

you just eliminated 2,000 possible revisions with a single test!

Pass Two

middle = 37000

boot = success

the offending changeset is somewhere between 37000 and 38000

you eliminated another 1,000 possible revisions as not-containing the error.

By testing 5 revisions, the range has been reduced from 4,000 to a more manageable 125! If you wanted, you could keep repeating this to narrow the range to 63, 32, or even 16 revisions. Depending on the error and the neighboring commits, you may need to reduce it even further.