Git
バイゼクト/間違ったコミットの検索
サーチ…
構文
git bisect <subcommand> <options>
git bisect start <bad> [<good>...]
git bisect reset
git bisect good
git bisect bad
バイナリ検索(git bisect)
git bisect
は、バイナリ検索を使ってどのコミットがバグを導入したのかを見つけることができます。
2つのコミット参照を提供することによってセッションを二等分することから始めます:バグの前に良いコミット、バグの後に悪いコミットです。一般的に、悪いコミットはHEAD
です。
# start the git bisect session
$ git bisect start
# give a commit where the bug doesn't exist
$ git bisect good 49c747d
# give a commit where the bug exist
$ git bisect bad HEAD
git
はバイナリ検索を開始します:リビジョンを半分に分割し、リポジトリを中間リビジョンに切り替えます。リビジョンが良いか悪いかを判断するためにコードを調べます。
# tell git the revision is good,
# which means it doesn't contain the bug
$ git bisect good
# if the revision contains the bug,
# then tell git it's bad
$ git bisect bad
git
はあなたの指示に応じて悪いリビジョンの残りのサブセットごとにバイナリ検索を続けます。 git
は、あなたのフラグが間違っていない限り、バグが導入されたリビジョンを正確に表現する、単一のリビジョンを表示します。
その後、 git bisect reset
を実行してbisectセッションを終了し、HEADに戻ります。
$ git bisect reset
バグをチェックできるスクリプトがあれば、次の方法でプロセスを自動化できます。
$ git bisect run [script] [arguments]
ここで[script]
は[script]
へのパスで、 [arguments]
はスクリプトに渡すべき引数です。
このコマンドを実行するとバイナリ検索が自動的に実行され、スクリプトの終了コードに応じて各ステップでgit bisect good
またはgit bisect bad
実行されます。 0で終了することを示してgood
1-124、126、または127で終了する悪い示しています。 125はスクリプトがそのリビジョンをテストできないことを示します( git bisect skip
を起動します)。
半自動で間違ったコミットを見つける
あなたが上にある想像master
ブランチと何かが(回帰が導入されました)期待通りに動作していないが、あなたがどこかわかりません。あなたが知っていることは、最後のリリース(タグ付けされているか、コミットハッシュを知っていて、ここでold-rel
取ることができる)で動作していたことだけです。
Gitは、非常に少ないステップ数(2分探索)で回帰を導入した間違ったコミットを見つけ出し、助けを得ています。
まず第一にバイセクションを開始します。
git bisect start master old-rel
これはmaster
が壊れたリビジョン(または最初の壊れたバージョン)であり、 old-rel
が最後の既知のバージョンであることをgitに伝えます。
Gitは両方のコミットの途中で切り離されたヘッドをチェックします。今、あなたはあなたのテストを行うことができます。それが動作するかどうかに応じて
git bisect good
または
git bisect bad
。このコミットをテストすることができない場合は、簡単にgit reset
行い、それをテストすることができます。git willlがこれを処理します。
いくつかのステップの後でgitは失敗したコミットハッシュを出力します。
バイセクトプロセスを中止するには、単に発行します
git bisect reset
gitは以前の状態を復元します。