覆盖在Git中合并两个分支

时间:2015-10-16 23:21:52

标签: git merge git-merge

有没有办法将分支A合并到B中并用B替换B中的任何内容,无论是否存在冲突?

3 个答案:

答案 0 :(得分:1)

您可以使用-X标记来指定首选项,ourstheirs

git merge <branch> -X ours将始终更喜欢您当前所在分支的版本,而git merge <branch> -X theirs则更喜欢要合并的分支版本。

man git-merge查看以下内容以获取更多详细信息:

  

<强>我们

     

此选项通过支持我们的版本,强制冲突的帅哥干净利落地自动解决。来自与我们方不冲突的其他树的更改将反映到合并结果中。对于二进制文件,整个内容都来自我们这边。

     

<强>他们

     

这与我们的#34;相反。

因此,在您的情况下,在分支git merge B -X ours上运行A应该可以解决问题!

答案 1 :(得分:1)

已发布的两个答案(-X ours-s ours)都是正确的,或者等同地,都是错误的。这取决于你想要的结果。

这是一个简单而具体的例子。假设我们有以下内容:

          O
        /   \
... - B       M
        \   /
          T

其中B是公共基础提交,O是“我们的”提交,T是“他们的”提交,M是合并结果(我们是想要生成)。

进一步假设在提交B中,文件conflict.txt说:

I am a file
that contains
some text.

另一个文件README完全为空。

在提交O中,我们将第二行更改为that has而不是that contains。 (也就是说,我们改变了第二行。)我们根本没有触及README

在提交T中,他们将第二行更改为that used to have(That is, they changed the word "contains" to "still contains".) They also added some text to README`。

现在,如果你要求git将他们的分支合并到我们的分支中,文件conflict.txt中就会发生冲突,因为git不知道如何处理冲突的更改。使用-X ours告诉git:如果发生冲突,请使用我们的版本,因此提交M将保留我们的更改并放弃更改。

另一方面,没有README冲突,因为我们没有更改它。只有他们更改了README。使用-X ours,提交M将保留其更改。

然后,使用-s ours,git也会保留我们的README版本。

根据您的问题,我不清楚,您需要哪些 - 或者可能是第三种非内置替代品。

答案 2 :(得分:0)

你可以这样做:

$ git checkout branchA
$ git merge -s ours branchB

这种合并被称为“我们的”合并策略。

查看有关合并文档here的更多信息。