0

git bisect 中に、分割されているコミットが対象のコミットのセットのメンバーである場合、特定のアクションを実行したいと考えています。具体的には、次の状況を考慮してください。

----------C-------- A
      \---B---/

B と C は両方とも A から到達可能ですが、相互には到達できません。bisect 中に、B が到達可能なコミットにパッチを適用したいと考えています。これは、B が無関係なバグを導入したためであり、そのノイズを除外したいと考えています。C を調べる場合は、パッチを適用しないでください。

一般に、コミット C が、コミット A から B に到達できるコミットのセットに含まれているかどうかをテストする最良の方法は何ですか? 理想的には git rev-list に渡すことができる式ですが、それ以上のものが必要になると思います。

4

1 に答える 1

0

$QAcommit (疑わしい祖先) が実際に commit の祖先(可能性のある子) であるかどうかをテストするには$PC:

git merge-base --is-ancester $QA $PC

このコマンドを実行した終了コードの結果$QAは、 が実際に の祖先である場合は 0 (真) であり、 が の祖先でない場合は$PCゼロ以外 (偽) です。(2 つのコミットが同じ場合、終了コードは 0 です。コミットはそれ自体の祖先と見なされます。このケースを区別するには、単純に 2 つのコミット識別子をハッシュに解決し、ハッシュが等しいかどうかをテストします。識別子が同じ場合すでにハッシュされている場合は、単に使用するか類似のものを使用します。それ以外の場合は、使用してハッシュへの変換を行います。)$QA$PCif [ $QA = $PC ]git rev-parse

の間git bisect$PCテストへのコミットは だけHEADで、2 つのテストを実行する必要があります ( と の両方に対してB) C

于 2016-08-17T23:43:50.813 に答える