使远程分支在合并冲突时优先生效

6

我有两个分支,currentmastercurrentmaster 提交的代码更多,所以我认为是时候合并了。

我切换到 master 分支。

git checkout master

我试图与current合并。
get merge current

我收到了大约20个这样的冲突:

CONFLICT (rename/add) <remote>
CONFLICT (rename/add) <remote>

首先问题是,如何使远程分支current优先?我正在使用git mergetool -t meld解决所有冲突,并且我正在点击选择所有远程更改而非本地更改。
那么我该如何通过一个命令完成这个操作?我想让远程更改生效。
此外,为什么会出现这些冲突?我认为最新的分支应该包含我们想要保留的更改,这不是很显然吗?

这些冲突是因为当前分支和主分支对同一文件进行了更改造成的。 - Tim
2
请查看http://git-scm.com/docs/git-merge中的“合并策略”段落。 - Tim
1个回答

9
当您进行合并操作时,可以指定一种策略来自动解决一些冲突(注释中包含一个链接,链接到该http://git-scm.com/docs/git-merge的手册页面)。您可以使用递归策略和选项theirs。这将通过使用正在合并的分支中的版本来解决所有冲突。如果您将主分支合并到您的分支,则应使用ours
命令最终应为:
git merge -s recursive -Xtheirs current

这将解决与合并的分支上所有冲突。

如果有冲突,请在提交合并之前仔细检查使用git diff --staged命令查看差异。同时运行所有测试确保冲突解决没有覆盖您实际想要的master上的更改。


我执行了你的命令,但是我的项目在主分支中不能工作,但在当前分支可以工作?这怎么可能?或者这绝对不是git的原因吗? - Starkers
因为您正在使用远程分支中的内容解决所有冲突,所以主分支上可能会出现现在已经损坏的更改。如果主分支上有依赖于发生冲突的另一个文件中的更改的更改,则可能会发生这种情况。冲突已通过当前内容解决,并最终会破坏主分支。 - Schleis

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