106

私は次の問題を抱えています:

  • のバージョンは正常にmaster動作します
  • 前の最後のタグのバージョンmaster(たとえばlast)にはバグがあります
  • 同僚は、lastその特定のバグに対する彼の改訂のためのパッチを必要としています

わかった。git bisectバグを修正したリビジョンを友人に聞いてみましょう。

git bisect start
git bisect bad last
git bisect good master

しかし、それはうまくいきません:

いくつかの良い回転は悪い回転の祖先ではありません。
この場合、gitbisectは正しく機能しません。
多分あなたは良い回転と悪い回転を間違えますか?

これを克服するためのヒントはありますか?ドキュメントで何かを見逃しましたか?

4

5 に答える 5

114

git 2.7以降、引数--term-oldおよび--term-newを使用できます。

たとえば、次のようにして問題修正コミットを特定できます。

git bisect start --term-new=fixed --term-old=unfixed
git bisect fixed master
git bisect unfixed $some-old-sha1

テストするときは、言うgit bisect fixedgit bisect unfixed、必要に応じて。

古い答え、2.7より前のバージョンのgitの場合

悪いことは良いことを意味し、良いことは悪いことを意味すると考えるように一時的に自分自身を訓練する代わりに、いくつかのエイリアスを作成してみませんか?

以下~/.gitconfigを追加します。

[alias]
        bisect-fixed = bisect bad
        bisect-unfixed = bisect good

このようにして、問題修正コミットの特定を開始できます。

$ git bisect start
$ git bisect-fixed master
$ git bisect-unfixed $some-old-sha1

テストするときは、言うgit bisect-fixedgit bisect-unfixed、必要に応じて。

于 2013-06-17T17:45:42.753 に答える
48

gitを「ごまかして」、良い<=>悪いの意味を入れ替えるだけです。

言い換えれば、「悪い」は問題を示さないものと見なすため、これはパッチのベースとなる「良い」バージョンではありません。

とにかく、良い点と悪い点はかなり主観的な概念ですよね?:)

git bisect start
git bisect good last
git bisect bad master
于 2013-03-14T10:53:00.157 に答える
22

git bisect run私がPerlのコマンド(自動テストを実行する)で行っているように使用しているprove場合は、単に交換する機会はありませgoodbad。テストの成功は、終了コードとして報告されます。

によって実行されるプログラムの終了コードを無効にする有効なBash構文を見つけましたgit bisect run

git bisect start
git bisect bad HEAD                 # last revision known to PASS the tests
git bisect good $LAST_FAIL_REVISION # last revision known to FAIL the tests
git bisect run bash -c "! prove"

これにより、によって実行されたテストに合格する最初のリビジョンが得られましたprove

于 2016-03-22T14:54:13.403 に答える
10

Gitでは、最初にそれらを定義しなくoldても使用できるようになりました。newさらなる引数としてコミットなしで呼び出す必要がありgit bisect startます。次に、を呼び出すことによって二等分線を適切に開始します。

git bisect old <rev>
git bisect new <rev>

https://git-scm.com/docs/git-bisect#_alternate_terms

これは基本的に、@MarcHが実装する必要があることを示唆していたことです。

于 2016-12-25T16:21:20.483 に答える
6

Gitエイリアスは良い考えですが、用語fixedunfixed同じ問題がgoodあります:回帰と進行の両方badと互換性を持たせることはできません。どちらの方法でも機能する単語を見つけるのは簡単です。元の二分探索用語からそれらを選択するだけで、何が良いか悪いかを先入観なく、本質的に中立です。例えば:

git config --global alias.bisect-high 'bisect bad'
git config --global alias.bisect-low  'bisect good'

このような中立的な用語を使用すると、回帰または修正を探しているかどうかにgit bisect-high関係なく、いつでも次のように入力できます:(またはgit bisect-upper、またはgit-bisect max、...あなたの選択!)。

残念ながら、gitbisectの開発者は既存の用語を単純に再利用できませんでした。一般的に言って、ユーザーインターフェイスはgitの関心事ではありません:http ://stevebennett.me/2012/02/24/10-things-i-hate-about-git/

于 2015-02-19T00:07:44.177 に答える