【问题标题】:Merge results in merge-conflicts to files I didn't alter合并导致与我未更改的文件发生合并冲突
【发布时间】:2016-02-23 16:19:28
【问题描述】:

我一直在使用 SAP's OpenUI5 repository 的一个分支,并希望合并来自另一个(更新的)发布分支的最新更改。 本质上,我想“升级”我的 fork。

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

我从发布分支而不是 master 开始我的“fork”,因为我担心在 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 之间手动比较提交(例如63596fb23117),OpenUI5 的发布分支似乎由来自mastercherry-picking 提交填充。发布分支不会合并回master,它们已完成更新。

git merge-base --is-ancestor aa08b45 origin/master; echo $?; # prints 1
git merge-base --is-ancestor cb4d1be origin/master; echo $?; # prints 1

那么,也许这种分支模型不利于处理公共发布分支?

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

【问题讨论】:

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


    【解决方案1】:

    这里的答案是创建我们自己的合并基础,方法是将两个发布分支合并在一起,并让后发布 (1.34.6) 一方赢得所有冲突(使用合并策略) .

    然后,将该合并基础合并到我们自己的分叉分支中。

    这样,每个发布分支的内容都可以从我们的 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...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多