0

我尝试使用 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

问题是为什么comment2在日志中显示为未合并时显示为未合并?

4

1 回答 1

3

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

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

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

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

因此,我怀疑如果comment2未检测到与相关的提交已被应用,那是因为补丁 ID 不同。例如,这可能是因为您在挑选与comment2. 这很可能意味着提交引入的补丁最终会有所不同。您可以通过比较这两个命令的输出来查看这是否正确:

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