繁体   English   中英

git cherry-pick从编程中合并

[英]git cherry-pick from a merge programmatically

我们正在使用与GitHub PR系统类似的git工具。 这样,东西就可以进行git merge --no-ff到master上。

当发布即将到来时,我们剪切发布分支。 任何进一步的错误修复都将首先合并到母版,然后再cherry-pick发行版。 我想以编程方式执行此操作。

因此:

commit bla
Merge: aaaa bbbb

我想:

  1. 找出合并的提交哈希
  2. 提交哈希的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM