Git Bisect
最終更新
git bisect は二分探索でバグを混入させたコミットを見つけます。既知の正常なコミットと既知の不良コミットを指定すると、その中間のコミットをチェックアウトし、あなたが good か bad をマークすると、毎回範囲を半分に絞り込みます - こうして数千のコミットの中でも数ステップで原因を特定します。
これらをターミナルプレイグラウンドで試してみましょう - ブラウザ上の本物のシェルで、インストール不要です。
構文
| Command | What it does |
|---|---|
git bisect start | bisect セッションを開始する |
git bisect bad | 現在のコミットを不良としてマークする |
git bisect good <hash> | 既知の正常なコミットをマークする |
git bisect good / git bisect bad | テストした各コミットをマークする |
git bisect run ./test.sh | 自動化: 各ステップをマークするためにテストを実行する |
git bisect reset | bisect を終了し、自分のブランチに戻る |
実践例
どのコミットがビルドを壊したかを見つけます。
| Step | Command | Result |
|---|---|---|
| 1 | git bisect start | 探索を開始する |
| 2 | git bisect bad | 現在のコミットは壊れている |
| 3 | git bisect good v1.0 | この古いタグは動作していた |
| 4 | テストして good/bad | Git がコミットを示すまで繰り返す |
git bisect のよくある質問
git bisect は何をしますか?
コミット履歴を二分探索して、バグを混入させた正確なコミットを見つけます。あるコミットを good、別のコミットを bad とマークすると、Git はテスト用に繰り返し中間点をチェックアウトし、最初の不良コミットを特定するまで毎回探索範囲を半分に絞り込みます。
git bisect はどう使いますか?
git bisect start を実行し、現在の壊れた状態を git bisect bad で、既知の動作するコミットを git bisect good <hash> でマークします。Git が中間点をチェックアウトするので、それをテストして git bisect good または git bisect bad を実行します。Git が最初の不良コミットを報告するまで繰り返し、その後 git bisect reset を実行します。git bisect は自動化できますか?
はい。
git bisect run <script> は各ステップでスクリプトを実行します - スクリプトは正常なコミットでは 0、不良なコミットでは 0 以外で終了する必要があります(テストランナーがよく適します)。すると Git は各コミットを手作業でマークすることなく自動で bisect を行い、最後に問題のコミットを出力します。bisect はどう終わらせますか?
git bisect reset を実行してセッションを終了し、開始前にいたブランチとコミットに戻ります。不良コミットを見つけたかどうかに関係なく実行してください - 一時的な bisect の状態を片付けます。これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ上の本物のシェルで
git bisect を実行できます - インストール不要です。Coddy の無料のインタラクティブな Git コースでは、履歴を段階的に調べる方法も扱っています。