git-cherry似乎不适用于无序的合并

时间:2011-03-21 11:38:51

标签: git merge cherry-pick

我尝试使用git cherry-pick来合并master中的一些提交,然后使用git-cherry来确定当前合并的提交。它按照它在master上的顺序合并它工作正常,但是当我跳过合并其中一个提交时它没有显示下一次合并。 示例如下:

$ 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显示为未合并而显示合并在日志中?

1 个答案:

答案 0 :(得分:3)

正如初步说明的那样,将这些描述为合并有点令人困惑 - 它们只是挑选,即通过将另一个提交引入的补丁应用到新父级而创建的提交。

git cherry查看提交引入的补丁,并测试是否已经在上游分支中引入了类似的补丁。正如git cherry man page中所述,它根据它们是否具有相同的"patch ID"来确定两个补丁是否相同,这被描述为:

  

“补丁ID”只不过是与补丁关联的差异的SHA1,忽略了空格和行号。因此,它“相当稳定”,但同时也相当独特,即具有相同“补丁ID”的两个补丁几乎保证是相同的。

     

IOW,你可以用这个东西来寻找可能的重复提交。

因此,我怀疑如果未检测到与comment2关联的提交已经应用,那是因为修补程序ID不同。例如,这可能是因为你必须在挑选与comment2相关联的提交时解决冲突。这可能意味着提交的提交最终会有所不同。您可以通过比较这两个命令的输出来查看是否正确:

git show 26370b3
git show 235b082