我一直使用SAP's OpenUI5 repository的分支暂时工作,并希望合并来自另一个(最近的)发布分支的最新更改。 从本质上讲,我想“升级”我的前叉。
我的fork point是aa08b45865b8db4457bc6c626754c58230811b43
,它指向rel-1.28
发布分支可以访问的提交。
我从发布分支开始我的“fork”,而不是master
,因为我担心master
的工作会不稳定并且提交会重叠多个版本。
我的升级目标是1.34.6
,cb4d1be36087ed7f1dfbde44884782774fceb51b
指向。
我需要运行的最终命令是:
git checkout aa08b45 # my original fork-point
git checkout -b myForkPoint # local branch
git merge cb4d1be # merge in 1.34.6 code
但这导致许多合并冲突到我没有改变的文件。 (我猜是因为我试图合并到我的HEAD
无法访问的引用中。)
使用merge-base
并在发布分支和master
之间手动比较提交(例如63596f
和b23117
),似乎OpenUI5的发布分支由{{1}填充来自cherry-pick
的提交。发布分支不会合并回master
,它们将被更新。
master
那么,或许这种分支模式不利于公共发布分支机构的工作?
无论如何,有没有一种干净的方法来“升级”我的叉子?
答案 0 :(得分:0)
这里的答案是创建我们自己的合并基础,方法是将两个发布分支合并在一起,让后发行版(1.34.6)赢得所有冲突(使用合并策略)
然后,将该merge-base合并到我们自己的分支分支中。
这样,每个发布分支的内容都可以从我们的fork-point到达,因此第二次合并的所有冲突都只来自我们引入的更改。
以下是步骤:
# first create the merge-base
git branch merge-1.34.6 1.34.6
git checkout merge-1.34.6
git merge rel-1.28 -s ours 1.34.6
# next merge the merge-base branch into us
git checkout myForkPoint
git merge merge-1.34.6
...fix conflicts, stage and commit...