合并冲突导致我没有改变的文件

时间:2016-02-23 16:19:28

标签: git open-source git-merge sapui5 git-fork

我一直使用SAP's OpenUI5 repository的分支暂时工作,并希望合并来自另一个(最近的)发布分支的最新更改。 从本质上讲,我想“升级”我的前叉。

我的fork point是aa08b45865b8db4457bc6c626754c58230811b43,它指向rel-1.28发布分支可以访问的提交。

我从发布分支开始我的“fork”,而不是master,因为我担心master的工作会不稳定并且提交会重叠多个版本。

我的升级目标是1.34.6cb4d1be36087ed7f1dfbde44884782774fceb51b指向。

我需要运行的最终命令是:

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之间手动比较提交(例如63596fb23117),似乎OpenUI5的发布分支由{{1}填充来自cherry-pick的提交。发布分支不会合并回master,它们将被更新。

master

那么,或许这种分支模式不利于公共发布分支机构的工作?

无论如何,有没有一种干净的方法来“升级”我的叉子?

1 个答案:

答案 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...