Git合并,保留两个

42

我在合并时使用此选项以“保留我的内容”

git merge -X ours foo

这是为了“保留他们自己”的

git merge -X theirs foo

然而,在我的最新合并中,保留双方看起来最好。Git是否有相应的“策略”可避免手动编辑文件?

3个回答

42

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

然而,如果您真的想要解决像这样的冲突:

<<<< ours
Foo
=========
Bar 
>>>> theirs
决定采取行动
Foo
Bar

那么您可以配置'合并驱动程序'。从gitattributes手册中得知:

union

对于文本文件运行三方面的文件级合并,但是取双方版本的行,而不是留下冲突标记。这往往会在生成的文件中以随机顺序留下添加的行,用户应验证结果。如果您不理解情况,请不要使用此功能。

添加一行到.gitattributes中以使用此功能:

*.whatever merge=union

17
并集不等于“保留两者”。并集是“保留两者”减去交集。在尝试对 XML 格式的资源文件执行“保留两者”操作时,这种方法将会失败。 - Ilia G
如果两个不同的 hunk 冲突,似乎会将其全部保留。 - max630
3
但是目前没有办法将此作为选项添加(如果我们认为编辑.gitattributes不属于‘选项’的范畴),以便专门用于您想以这种方式合并的冲突?这些冲突非常普遍,有一个一行命令解决它们的方法会很方便(在同一文件中添加多个导入/函数/属性且顺序不重要)。 - Damon
2
这里的".*whatever"是什么意思?完全不清楚。 - Brian Peterson
1
此外,我应该在何时将此行添加到.gitattributes中,然后在进行“union”合并之前或之后需要执行什么操作? - Brian Peterson
显示剩余3条评论

10
这个如何?

这段命令的作用是从filename.txt文件中排除所有以特定字符串开头或包含特定字符串的行,并将结果存储到名为filename.tmp的临时文件中。然后,使用mv命令将新文件重命名为原始文件名filename.txt


这将省略那些在他们和我们的文件中相同的行。我猜它被称为交集。在合并点,你有上述字符串("<<<"等),Git已经删除了我实际想要保留的“重复”行。 - Stan

0

有时候需要解决大量代码的冲突。当我想要保留两者时,我会这样做:

  1. 复制整个代码块。这样就有了两个实例。
  2. 在第一个实例中删除HEADours部分。
  3. 在第二个实例中删除待合并或their部分。

1
问题是如何“避免手动编辑文件”。这意味着不要像这个答案所做的那样。 - matt
@matt 对不起,我没有注意到。 - user3405291

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接