如何忽略挑选的提交记录,在列出与已完全合并的分支的提交记录差异时

3
在一个分支模型中,其中一个分支A总是合并到另一个B中,如何列出所有在B中但不在A中的提交,同时忽略所有樱桃挑选的提交和合并?
     a1-------b2' -- A
   /    \       \
 b1--b2--m1--b3--m2--b4 -- B

b2': cherry-picked commit

在这种情况下,它应该列出提交b3,b4
在Git手册中进行一些研究:
通过--no-merges--cherry-*选项解决了忽略合并和精选提交的问题。但是--cherry-*选项使用提交的对称差异(即A...B)将精选提交匹配在一起。在这个例子中,提交b2不属于其中。 git log --cherry A...B返回b2,b3,b4
您可以使用以下命令重现此示例:
mkdir reprod; cd reprod; git init
git check-out -b B
git commit -m "b1" --allow-empty
git commit -m "b2" --allow-empty
git check-out -b A B^{/b1}
git commit -m "a1" --allow-empty
git cherry-pick --allow-empty B^{/b2}
git check-out B
git merge A^{/a1} --no-edit
git commit -m "b3" --allow-empty
git merge A^{/b2} --no-edit
git commit -m "b4" --allow-empty
git log A...B --cherry
1个回答

0

(失败的假设-仅供历史参考)

看起来你需要在这里使用--left-only / --right-only

请参见段落中的内容。

例如,--cherry-pick --right-only A...B会省略那些在A中或与A中的提交补丁等效的提交在B中的提交。换句话说,这列出了git cherry A B的+提交。更准确地说,--cherry-pick --right-only --no-merges给出了精确的列表。

这难道不是你的确切情况吗?


我添加了一个命令脚本来重现这个例子。你可以亲自看看 :)。 - montrivo
@montrivo 我觉得你说得很对。的确是个有趣的问题 :-) - Romain Valeri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接