让我们假设我得到一个合并冲突foo/bar.txt
运行这个时候:
$ git checkout A
$ git merge B
我想通过采取自动解决冲突foo/bar.txt
从分支A.(我知道我在做什么,我需要这个。在支路B的版本是错误的,我不关心失去了在这种情况下工作树改变)看来,我可以通过运行这些命令做到这一点:
$ git reset foo/bar.txt
$ git checkout foo/bar.txt
有没有更简单,单指令的解决方案?
不幸的是这些命令改变foo/bar.txt
即使没有冲突,我不希望出现这种情况。 如果没有冲突,我想希望保留foo/bar.txt
在任何状态git merge B
已经离开它。
所以我需要一个Unix shell命令,如果在一个冲突,将检测foo/bar.txt
,如果有,它会采取的版本解决冲突foo/bar.txt
从当前分支。 它不会做任何事情,也就是说,它不会修改其他文件,它不会提交更改,并不会改变foo/bar.txt
如果没有在该文件中没有冲突。
如果你想要做它作为一个一次性的,单条命令是:
$ git checkout --ours foo/bar.txt # <-- resets it only if the merge found conflicts in this file
$ git checkout HEAD -- foo/bar.txt # <-- resets it to that specific version no matter what
要配置Git的合并永久忽略的本地更改的文件的所有上行的变化:
$ git config merge.pin.driver true
$ echo foo/bar.txt merge=pin >> .git/info/attributes
( true
以上仅仅是Unix的true
命令,它的成功说,它所做的本地版本期待权,在这种情况下,什么也不做吧。当然,你可以让你的合并命令更复杂。)
我想你不希望merge --strategy=ours
或--strategy-option=ours
,那些适用于整个合并。
您可以指定合并策略选择ours
的recursive
(默认值)合并策略。 它会做一个正常的合并,但冲突的帅哥的情况下会选择当前分支的版本。
git checkout A
git merge -Xours B
文章来源: How to automatically resolve a Git conflict by taking the version in the current branch?