[英]git cherry-pick from a merge programmatically
我们正在使用与GitHub PR系统类似的git工具。 这样,东西就可以进行git merge --no-ff
到master上。
当发布即将到来时,我们剪切发布分支。 任何进一步的错误修复都将首先合并到母版,然后再cherry-pick
发行版。 我想以编程方式执行此操作。
因此:
commit bla
Merge: aaaa bbbb
我想:
git cherry-pick
如何找到包含的合并提交? Merge:
行的语法是什么?
如果您确定只希望选择一个提交,则可以选择合并的第二个父对象(即,合并到的分支的尖端,在示例中为bbbb
),如下所示: git cherry-pick bla^2
(我使用您漂亮的名字进行合并提交)
如果要尝试选择整个提交范围,则要稍微复杂一点,但基本上,您必须找到合并分支发散的点并进行一些设置算法。 前者可以使用git merge-base
来完成,后者可以使用..
语法( A..B
含义:B可以到达但A A..B
任何东西):
git cherry-pick $(git merge-base bla^1 bla^2)..bla^2
但是,如果合并分支中还有其他合并(例如,将master合并到bugfix分支中,然后再将其合并回master),则情况将变得更加复杂。 在这种情况下,我建议您不要尝试自动执行此操作,因为它太容易出错。
编辑:您更新了问题,以询问日志中“ Merge
行的语法。 实际上很简单。 在数据结构方面,合并提交与普通提交的不同之处在于它具有多个父级(普通提交仅以其紧接的“祖先”作为父级)。 在通过git merge
和其他高级工具完成的普通合并中,第一个父级(在您的示例中为aaaa
)是合并时位于基本分支尖端的提交,第二个父级( bbbb
)是任何合并内容的最高提交-因此,我上面的建议bla^2
:2指的是第二个父对象,即bbbb
。
一个有点不寻常的情况是与两个以上父母的合并提交,称为章鱼合并。 如果将多个branch / commit参数传递给git merge
则可以得到章鱼git merge
。 很少有人用过这些,它们使解决冲突变得更加乏味且容易出错,我只是为了完整起见仅提及它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.