Git には、バグが導入された最初のコミットを二分探索で探す機能 git bisect がある。
これを使うには、まずあらかじめ、バグが導入されていて悪い(bad)コミットひとつと、バグが導入される前の良い(good)コミットひとつを手探りで探しておく。
例えば bad が a0e9c6efa585897f00eb22e67887e5a25482b1b8 で good が v3.16 だとする。
このとき、次のようにセッションを開始する。
git bisect start git bisect bad a0e9c6efa585897f00eb22e67887e5a25482b1b8 git bisect good v3.16
すると Git は次に試すべきコミットを計算しチェックアウトする。
Bisecting: 31504 revisions left to test after this (roughly 15 steps) [70e71ca0af244f48a5dcf56dc435243792e3a495] Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
我々はこのコミットをコンパイルし、実際に動かしてみるなどして悪い(bad)コミットか良い(good)コミットかを判断する。
ここでは good だったとすると、次のように入力する。
git bisect good
すると Git は次に試すべきコミットを計算しチェックアウトする。
Bisecting: 15752 revisions left to test after this (roughly 14 steps) [cf7492e933c0df200f8fa46c3684e8bd20890ab2] scripts/gdb: add internal helper and convenience function to retrieve thread_info
我々はまたこのコミットをコンパイルし bad か good か判断する。
git bisect good Bisecting: 8854 revisions left to test after this (roughly 13 steps) [80ed156a3d12819a8c839f40f5b6996c4aa117a5] s390/pci: add locking for fmb access
この作業を、最初の bad コミットを判別するまで繰り返す。
... git bisect bad Bisecting: 1 revision left to test after this (roughly 1 step) [394838c96013ba414a24ffe7a2a593a9154daadf] x86/asm/entry/32: Fix user_mode() misuses git bisect good Bisecting: 0 revisions left to test after this (roughly 0 steps) [7486341a98f26857f383aec88ffa10950087c3a1] x86/platform, acpi: Bypass legacy PIC and PIT in ACPI hardware reduced mode git bisect bad 7486341a98f26857f383aec88ffa10950087c3a1 is the first bad commit commit 7486341a98f26857f383aec88ffa10950087c3a1 Author: Li, Aubrey <aubrey.li@linux.intel.com> Date: Wed Mar 11 16:09:00 2015 +0800
x86/platform, acpi: Bypass legacy PIC and PIT in ACPI hardware reduced mode
...
現在の状況や最終の状態を見るには git bisect view とする。
git bisect セッションを終了するには git bisect reset とする。