考虑以下场景:
$ git branch –a
* dev
master
$ git branch --contains 53fdfaf89fca499c36c71d29f25eb1a13b32d4d6
dev
$ git branch --contains f7dfb3689edcaf5f819fa5e691ce13abf858bca8
dev
master
$ git cherry master dev
+ 53fdfaf89fca499c36c71d29f25eb1a13b32d4d6
+ a4e66dbde954f73185d61bfb78b40ac5e61fe56c
+ 6fcffbd9b57e8a74726ea2cd3713f14baaaa06f5
+ 5031ad3cdf2e81c880e9cbf049abed6f1edde3bc
+ dcca33c373df6953ff164e8d70531abd71841278
但转折点是,提交f7dfb3689edcaf5f819fa5e691ce13abf858bca8
实际上是从 中挑选出来的53fdfaf89fca499c36c71d29f25eb1a13b32d4d6
,并且两者完全相同(请原谅我,因为出于某种原因,我们必须有 2 个完全相同的提交,但提交 id 不同)除了提交消息和提交 id,还有两次提交之间没有区别。
现在根据git cherry
文档,
将提交与从 git patch-id 程序获得的补丁 ID 进行比较。
所以我实际上继续执行git patch-id
下面的程序
$ git show 53fdfaf89fca499c36c71d29f25eb1a13b32d4d6 | git patch-id
bd6c061bd6c380d53832510cbaf68bebb4fb182d 53fdfaf89fca499c36c71d29f25eb1a13b32d4d6
$ git show f7dfb3689edcaf5f819fa5e691ce13abf858bca8 | git patch-id
bd6c061bd6c380d53832510cbaf68bebb4fb182d f7dfb3689edcaf5f819fa5e691ce13abf858bca8
上面的结果表明,git patch-id
实际上确实承认这两个提交是相同的,但git cherry
命令仍然无法做到这一点。
我能看到发生这种情况的唯一原因是如果git cherry
考虑到除git patch-id
.
它是否考虑了头部提交的数量(即我的开发分支)?因为我们在 dev 分支上有 2 个版本的提交,而在 master 上只有 1 个。