当列出与完全合并的分支的提交差异时,如何忽略精心挑选的提交

时间:2019-06-27 21:42:29

标签: git git-log git-cherry-pick

在一个分支模型中总是将一个分支A合并到另一个B中的分支模型中,如何忽略B挑选的所有提交和合并,而不列出A中的所有提交?

     a1-------b2' -- A
   /    \       \
 b1--b2--m1--b3--m2--b4 -- B

b2': cherry-picked commit

在这种情况下,它应该列出提交b3, b4

git手册中的一些研究内容:
--no-merges命令的--cherry-*git-log选项已经解决了忽略合并和精心挑选的提交问题。但是--cherry-*的人使用commits对称差(即A...B)来将Cherry-pick匹配在一起。在此示例中,提交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 :(得分:0)

(失败的假设-仅在历史记录中保留)

似乎您必须在这里使用--left-only / --right-only

请参见此paragraph

  

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

这不是您的确切情况吗?