如何使用HEAD解决所有冲突,使用任何mergetool

时间:2013-11-26 22:21:36

标签: git git-merge opendiff

因此,由于某些原因,我与新的合并修补程序发生了很多冲突。实际上[手动]更改的文件没有冲突。 所有冲突都存在于修复期间未触及的文件中,显然是空白问题。我稍后会尝试解决该问题,但现在我需要合并修补程序并部署。

如何解决所有冲突以使用HEAD版本?我不想一个接一个地去。是的,我知道这是一个不好的做法,但冲突都是空白,我知道HEAD是正确的 - 通过所有测试并在生产中运行良好。

有什么想法吗?

我正在使用OSX。

2 个答案:

答案 0 :(得分:40)

git merge -Xours origin/master

将与origin/master合并(与git pull origin master相同)并通过从本地分支获取版本来解决任何冲突。

如果你已经完成了错误的合并,你可以先用git reset --hard HEAD重置所有内容。

在这种情况下,你应该做

git reset --hard HEAD
git merge -Xours origin/master

那应该可以解决你的问题!

(另外值得一提的是,-Xtheirs会做同样的事情,但在任何冲突中都会使用上游版本。)


此外,最有可能的冲突是因为上游版本使用的是Windows样式的行结尾,而且您在本地计算机上编辑文件的程序使用的是mac样式或linux样式的行结尾。

你可以在git中设置总是提交windows风格或linux风格的行结尾的选项,但总是在你的工作目录中检查mac-style或linux-style。

有关详细信息,请参阅此链接: https://help.github.com/articles/dealing-with-line-endings

答案 1 :(得分:4)

我会:

$ git checkout master   # or where ever you want to merge the hotfix into
$ git merge --no-commit -Xours <hotfix-branch>
$ git status    # make sure the only change is the file you wanted
$ git diff      # make sure they changes are what you wanted
$ git commit -m "<your merge message"

这将使用任何非冲突文件中的默认递归策略pull,但它将通过简单地使用master / HEAD版本来解决任何冲突的文件。文档:

$ git merge --help
....

   recursive
       ... This is the default merge strategy when pulling or merging one branch.

       The recursive strategy can take the following options:

       ours
           This option forces conflicting hunks to be auto-resolved cleanly
           by favoring our version. Changes from the other tree that do not
           conflict with our side are reflected to the merge result. ....