0

master からいくつかのコミットをマージするために git cherry-pick を使用してから、現在マージされているコミットを特定するために git-cherry を使用しようとしました。マスター上にある順序でマージしている間は問題なく動作しますが、コミットの 1 つをマージするのをスキップすると、次のマージが表示されません。以下の例:

$ git branch
* branch
  master
$ git log --oneline
46aad17 comment4
56e43b0 comment3
26370b3 comment2
6192fa4 comment1

$ git cherry -v branch master
- 5c5e979707cd6a77ef3ae79627cdd211cad86a28 comment3
- ee0386c78d9e6d21dce7a8bac8e40beef73fb993 comment4
+ 9495c94ece440d9a05c3218f88d1b72a7fd67664 unmerged # this wasn't merged
+ 235b0822f08f351264071e7b2500caa9af997fb8 comment2

問題は、コメント 2 がログにマージされているのにマージされていないと表示されるのはなぜですか?

4

1 に答える 1

3

予備的な注意として、これらをマージと表現するのは少し紛らわしいです。つまり、別のコミットによって導入されたパッチを新しい親に適用することによって作成されたコミットです。

git cherryコミットが導入するパッチを見て、上流のブランチに導入された同様のパッチがすでにあるかどうかをテストします。git cherry man pageに記載されているように、2 つのパッチが同じ"patch ID"を持っているかどうかに基づいて同じかどうかを判断します。これは次のように記述されています。

「パッチ ID」は、パッチに関連付けられた差分の SHA1 に他ならず、空白と行番号は無視されます。そのため、「かなり安定」していますが、同時にかなりユニークでもあります。つまり、同じ「パッチ ID」を持つ 2 つのパッチは、ほぼ同じものであることが保証されています。

IOW、これを使用して、重複する可能性のあるコミットを探すことができます。

したがって、関連付けられているコミットcomment2が既に適用されていると検出されない場合は、パッチ ID が異なるためだと思います。これは、たとえば、に関連付けられているコミットをチェリー ピッキングするときに、競合を解決する必要があったためかもしれませんcomment2。これは、コミットによって導入されたパッチが最終的に異なるものになったことを意味している可能性があります。次の 2 つのコマンドの出力を比較すると、それが正しいかどうかを確認できます。

git show 26370b3
git show 235b082
于 2011-03-21T11:53:52.597 に答える