search

Found

info 概要

1000 コミットでも約 10 回で原因コミットに到達する git bisect の必要ステップ数を ⌈log₂(N)⌉ で算出。1 ステップの所要時間から総時間を見積もり、二分探索の収束も可視化。

📘 使い方

  1. 履歴を二分探索する対象コミット数を入力する
  2. 正常・不具合コミットの位置が分かれば任意で指定して範囲を絞る
  3. 1 ステップあたりのビルド/テスト時間を入力する

git bisect ステップ数計算機

最後にバグがなかったコミットの位置。古いほど 0 に近い。

バグが確認できる最新コミットの位置。空欄なら最新(HEAD)。

sec

計算結果

ステップ数
0
探索範囲
0
所要時間目安
0s
二分探索の収束イメージ

※ 計算式: steps = ⌈log₂(n)⌉ = 0

Article

git bisect ステップ数計算機|バグ特定までの回数と時間を見積もる

git bisect でバグの原因コミットを突き止めるまでに、何回 good/bad を答える必要があるのか。対象コミット数を入れるだけで、必要ステップ数 ⌈log₂(N)⌉ と、1 ステップの所要時間から見積もった総時間が分かります。二分探索が範囲を半分ずつ畳んでいく様子も段階バーで確認できます。

💡 このツールについて

git bisect は、正常だった地点(good)とバグが出た地点(bad)の間を二分探索し、原因コミットを O(log N) で絞り込むデバッグコマンドです。1000 件のコミットがあっても、1 件ずつ確認すれば最悪 1000 回ですが、二分探索なら 10 回前後で済みます。

ただ、実際に bisect を始める前に「これは何回くらい付き合うことになるのか」「CI が遅いから 1 回 5 分かかる、トータルどのくらい?」が読めないと、着手をためらいがちです。このツールは対象コミット数からステップ数を ⌈log₂(N)⌉ で算出し、1 ステップの所要時間を掛けて総時間の目安を出します。さらに good/bad の位置が分かっていれば、その間だけを探索範囲として絞り込めます。範囲を狭めるほどステップ数も減るので、「どこまで範囲を絞れば何回減るのか」を入力しながら把握できます。

🧐 よくある質問

Q. ステップ数はどう計算していますか? 探索範囲のコミット数を N として ⌈log₂(N)⌉ で求めます。二分探索は 1 回ごとに範囲が半分になるため、N を 1 まで絞り込むのに必要な分割回数がこの値です。N=1(範囲に 1 件しかない)なら 0 ステップになります。

Q. good/bad の位置は必須ですか? 任意です。空欄なら good を履歴の先頭(0)、bad を最新(HEAD)とみなし、全コミットを範囲として計算します。位置が分かっている場合に入力すると、その区間だけが探索対象になり、ステップ数と時間が減ります。

Q. 所要時間の見積もりはどこまで正確ですか? ステップ数 × 1 ステップの所要時間という単純な掛け算です。ビルドや手動テストにかかる平均時間を入れた概算で、CI のキュー待ちや bisect の中断・再開は含みません。着手前の規模感をつかむ目安として使ってください。

Q. git bisect run で自動化したときの回数も同じですか? 同じです。git bisect run <スクリプト> はテストの good/bad 判定を自動化するだけで、二分探索の回数自体は変わりません。手動で答えるか、スクリプトに答えさせるかの違いだけなので、ステップ数の見積もりはそのまま使えます。

📚 二分探索が速い理由

bisect の語源は「二等分する」です。範囲を半分にするたびに残りの候補が半分になるので、N 件を 1 件まで絞るには「N を何回 2 で割れば 1 になるか」= log₂(N) 回で済みます。コミット数が倍になっても増えるステップはたった 1 回。1000 件で約 10 回、100 万件でも約 20 回です。この「件数が増えても回数がほとんど増えない」性質こそ、大規模リポジトリでも bisect が実用的であり続ける理由です。なお、ビルドが壊れて判定できないコミットは git bisect skip で飛ばせますが、skip が増えると有効な分割が減り、実際の回数は理論値より少し増えることがあります。