【问题标题】:git merge, keep bothgit合并,保留两者
【发布时间】:2012-11-07 05:53:20
【问题描述】:

为了合并,我用它来“保留我的”

git merge -X ours foo

这是“保留他们的”

git merge -X theirs foo

但是,在我最近的合并中,最好保留双方。 Git 是否为此制定了“策略”,以避免手动编辑文件?

【问题讨论】:

    标签: git git-merge


    【解决方案1】:

    没有解决这些冲突的“合并策略”。

    但是,如果你真的想要这样的冲突:

    <<<< ours
    Foo
    =========
    Bar 
    >>>> theirs
    

    解决

    Foo
    Bar
    

    然后您可以配置“合并驱动程序”。来自gitattributes 手册页:

    联合

    对文本文件运行 3 路文件级合并,但从 两个版本,而不是留下冲突标记。这往往 将添加的行以随机顺序保留在结果文件中,并且 用户应验证结果。如果您不这样做,请不要使用它 了解其中的含义。

    在 .gitattributes 中添加一行以使用它:

    *.whatever merge=union
    

    【讨论】:

    • 联合不映射到“同时保留”。联合是“保持两者”减去交叉点。当试图在 XML 之类的资源文件上“保留两者”时,这将非常失败。
    • 如果 2 个 diff hunks 发生冲突,它们似乎都被完全保留了。
    • 但是无法将其添加为选项(如果我们不考虑将 .gitattributes 编辑为“选项”),可以专门针对您希望以这种方式合并的冲突调用?这些是如此常见,如果有一种方法可以将它们单行 cli 就太好了(将多个导入/函数/属性添加到同一个文件中,顺序无关紧要)
    • 这里的“.*whatever”是什么意思?一目了然
    • 另外,我应该在什么时候将此行添加到 .gitattributes,然后在(或之前)之后(或之前)什么才能使“联合”合并发生?
    【解决方案2】:

    这个呢?

    grep -v -e'^&lt;&lt;&lt;&lt;&lt;&lt;&lt;' -e '^&gt;&gt;&gt;&gt;&gt;&gt;&gt;' -e'=======' filename.txt &gt; filename.tmp

    mv filename.tmp filename.txt

    【讨论】:

    • 这将省略他们和我们相同的行。我想这叫十字路口。在您拥有上述字符串(“
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 2015-08-22
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多