<h1>歴史を外科手術する:高度なトラブルシューティング Part 3</h1>

これまでのトラブルシューティングの章では、日々の開発で頻繁に遭遇する問題への対処法を学びました。Part 3では、さらに一歩踏み込み、まるで外科手術のように歴史を精密に操作する、より高度なコマンドを紹介します。

これらのコマンドは、特定のコミットを狙い撃ちで修正したり、バグの原因を効率的に特定したりする際に絶大な力を発揮します。非常に強力なツールであるため、その仕組みと影響を正確に理解し、慎重に使いこなすことが求められます。


<h3>① git bisect:バグの原因となったコミットを自動で特定する</h3>

目的: あるバグが、いつのコミットから混入したのかを、二分探索というアルゴリズムを使って効率的に特定します。コミット履歴が数百、数千あるような大きなプロジェクトで、原因調査の時間を劇的に短縮できます。

例えるなら: 辞書で単語を探す作業に似ています。まず辞書の真ん中のページを開き、探している単語がそのページより前にあるか後ろにあるかを確認します。そして、関係ない半分を無視し、残りの半分でまた同じことを繰り返します。bisectは、この手順をコミット履歴に対して自動で行ってくれる、超優秀な探偵です。

どんな時に使う?:

コマンド例

まず、bisect(二等分するという意味)のセッションを開始します。

git bisect start

次に、現在のHEADがバグを含んでいる「悪い」状態だと教えます。

git bisect bad

そして、バグがなかったことが分かっている過去の「良い」コミットのハッシュ値やタグを教えます。

git bisect good v1.2.0

この後、Gitは自動で中間地点のコミットに移動します。あなたはその状態でテストを行い、バグが存在するかをGitに伝えます。

# テストしてバグがあれば...
git bisect bad

# ...バグがなければ
git bisect good

これを繰り返すと、Gitが最終的に「このコミットが最初にバグを混入させた犯人だ」と特定してくれます。調査が終わったら、以下のコマンドでbisectセッションを終了し、元のブランチに戻ります。