次の問題があります。
master
のバージョンは正常に動作しますmaster
(たとえばlast
)の前の最後のタグのバージョンにバグがあるlast
リビジョンのパッチを必要としていますはい。友達に聞いてみましょうgit bisect
バグを修正したリビジョン:
git bisect start
git bisect bad last
git bisect good master
しかし、それはうまくいきません:
いくつかの良いrevは悪いrevの祖先ではありません。
この場合、git bisectは正しく機能しません。
たぶんあなたは良い回転と悪い回転を間違えますか?
これを克服するためのヒントはありますか?ドキュメントで何かを見逃しましたか?
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 fixed
またはgit 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-fixed
またはgit bisect-unfixed
適切に。
私は単にgitを「だまし」、良い<=>悪いの意味を交換します。
言い換えると、「不良」を問題のないものと見なして、パッチのベースとなる「適切な」バージョンではないようにします。
とにかく、かなり主観的な概念が良い点と悪い点ですよね? :)
git bisect start
git bisect good last
git bisect bad master
私がPerlのprove
コマンド(自動テストを実行する)で行っているようにgit bisect run
を使用している場合、good
とbad
を交換するだけのチャンスはありません。 。テストの成功は、終了コードとして報告されます。
git bisect run
によって実行されるプログラムの終了コードを無効にする有効なBash構文を見つけました。
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"
passprove
によって実行されたテストの最初のリビジョンが得られました。
Gitでは、最初に定義することなく、old
とnew
を使用できるようになりました。追加の引数としてコミットせずにgit bisect start
を呼び出す必要があります。次に、
git bisect old <rev>
git bisect new <rev>
https://git-scm.com/docs/git-bisect#_alternate_terms
これは基本的に、@ MarcHが実装する必要があると示唆していたことです。
Gitエイリアスは良い考えですが、用語fixed
とunfixed
には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
、...選択!)回帰または修正を探しているかどうか。
Git bisect開発者が既存の用語を単純に再利用することはできません。ユーザーインターフェイスは一般的に言ってgitの問題ではありません: http://stevebennett.me/2012/02/24/10-things-i-hate-about-git/