これまでのトラブルシューティングの章では、日々の開発で頻繁に遭遇する問題への対処法を学びました。Part 3では、さらに一歩踏み込み、まるで外科手術のように歴史を精密に操作する、より高度なコマンドを紹介します。
これらのコマンドは、特定のコミットを狙い撃ちで修正したり、バグの原因を効率的に特定したりする際に絶大な力を発揮します。非常に強力なツールであるため、その仕組みと影響を正確に理解し、慎重に使いこなすことが求められます。
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
セッションを終了し、元のブランチに戻ります。