【问题标题】:Git(Hub) 3 way merge, patchGithub) 3路合并、补丁
【发布时间】:2014-10-12 20:55:18
【问题描述】:

有没有办法自动合并 2 个头分支和 1 个基分支之间的冲突?

我试图在补丁级别做到这一点

  • VersionA 是我的基础

  • VersionB 从 VersionA 分支

  • 版本 B 应用了一个额外的 mod,Base+ModB

  • VersionC 是从 VersionA 分支出来的

  • VersionC 应用了一个额外的 mod,Base+ModC

手动应用补丁,我可以派生一个 A:B 和一个 A:C 补丁,并将它们依次应用到版本 A。但是,如果两者在它们应用的区域发生冲突(例如编辑同一区域),它们就会中断。

我尝试了各种工具,如 interdiff 和 combineiff 手动创建组合补丁,但没有成功(我在 Windows 上,interdiff 与 cygwin 兼容,但我不知道 UNC 是否是一个问题,到目前为止我不这么认为),由于 interdiff/combinediff 要求,将输出具体化为 Unified vs Contextual。

那么...有没有办法可以将版本 A 作为我的基础,并将版本 A:B && A:C 的组合更改作为我的头?并执行某种 3 向拉取请求?

如果出现任何冲突,我希望 git 能够通过臭名昭著的 >>>> 和 ===== 以及

最终,我想通过组合补丁找到一种在补丁级别上执行此操作的方法。我看到 git(hub) 有一些选项可以使用 3 路补丁和使用 git apply 和 git patch 和 git format-patch 发送补丁。

这也有帮助: Git pull gives conflicts with octopus strategy

虽然我不是从远程拉取并且拉取是在本地工作时合并(命令的工作原理几乎完全相同)。

【问题讨论】:

    标签: git github merge diff patch


    【解决方案1】:

    最接近的是章鱼合并(多个 HEAD 的合并):

    git merge B C
    

    请注意,顺序可能很重要:“Git octopus merge order of multiple branches”。


    OP thistleknot 加上in the comments

    最初合并并没有起作用,直到我发现我或多或少地在“错误的点”处分出了一个共同的祖先。
    直到我查看了merge*.* 输出文件并看到每个合并文件都是一个源文件,我才知道它。来自版本B 和版本C 以及BC 的共同祖先之一。一旦我弄清楚了,我就可以做一些更多的分支魔法,合并工作,<<<====

    【讨论】:

    • 谢谢,有人说我应该调查一下或者重新设置基准。我很感激,我会试试看效果如何。
    • 谢谢。合并最初并没有奏效,直到我发现我或多或少地在“错误点”处分出了一个共同的祖先。直到我查看了 merge*.* 输出文件并看到每个合并文件都是一个源文件,我才知道它。一个来自版本 B 和版本 C 以及 B 和 C 的共同祖先。一旦我弄清楚了,我就能够做一些更多的分支魔法,并且合并工作,使用
    • @thistleknot 太棒了!我已将您的评论包含在答案中以提高知名度。
    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 2013-05-28
    • 2017-06-07
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多