在一个分支模型中总是将一个分支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
答案 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
给出了确切的列表。
这不是您的确切情况吗?