サーチ…


構文

  • 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は以前の状態を復元します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow