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



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

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

有什么想法吗?

我正在使用OSX。

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风格或linux样式。

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

如果您在本地分支上发生冲突,您可以简单地运行以下命令:

git checkout --conflict=merge .
git checkout --ours .

使用本地分支机构解决冲突。

我会:

$ 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"

这将使用默认的递归策略拉入任何不冲突的文件,但它将通过简单地使用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. ....

相关内容

  • 没有找到相关文章