1. ホーム
  2. git

[解決済み] git bisect を使って最初の GOOD コミットを見つけるには?

2022-11-10 06:31:56

質問

次のような問題があります。

  • にあるバージョンは master は正常に動作します。
  • の前にある最後のタグのバージョンは master (例えば last にはバグがあります。
  • 同僚が自分の last リビジョンのバグを修正する必要があります。

なるほど。私たちの友人に聞いてみましょう git bisect にバグを修正したリビジョンを聞いてみましょう。

git bisect start
git bisect bad last
git bisect good master

でも、それじゃダメなんです。

良いレヴの中には、悪いレヴの祖先ではないものもある。

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 を適宜使用します。