我们使用的git工具的工作原理类似于GitHub PR系统。因此,东西git merge --no-ff
被添加到母版上。
发行版发布时,我们会剪切发行版分支。所有其他错误修复程序将首先合并到母版,然后cherry-pick
到发行分支。我想以编程方式执行此操作。
所以:
commit bla
Merge: aaaa bbbb
我想:
git cherry-pick
提交哈希如何找到包含的合并提交?
Merge:
行的语法是什么?
答案 0 :(得分:2)
如果您确定只想选择一个提交,则可以选择合并的第二个父级(例如,合并到的分支的尖端,在示例中为bbbb
),例如所以:git cherry-pick bla^2
(我使用您漂亮的名字来进行合并提交)
如果要尝试选择整个提交范围,则要稍微复杂一点,但是基本上,您必须找到合并分支发散的点,并进行一些设置算法。前者可以使用git merge-base
来完成,后者可以使用..
语法(A..B
的含义:可以从B到达但不能从A到达的任何东西):
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
,则将获得章鱼合并。很少有人用过这些,它们使解决冲突变得更加乏味且容易出错,我只是为了完整起见只提到它们。