运行此命令时,我在index.js
中遇到合并冲突:
$ git checkout feature
$ git merge master
feature
分支index.js
const a = 1;
const b = 1;
master
分支index.js
(这是feature
分支的诞生地)
const a = 1;
master
分支index.js
(当前状态)
const a = 2;
我想要以某种方式自动解决冲突,以便将index.js
分支上的feature
更新为此:
const a = 2;
const b = 1;
答案 0 :(得分:2)
就像提到的评论一样,Git仅擅长决定如何将代码组合在一起。您可能对合并策略选项感兴趣。您可以运行
git merge --strategy-option theirs
或git merge --strategy-option ours
在发生冲突时偏向源或目的地。在此处阅读有关此内容的更多信息:
Resolve Git merge conflicts in favor of their changes during a pull
答案 1 :(得分:1)
我建议您不要在此处使用-X ours
或-X theirs
(或更长的拼写等效项--strategy-option ours
等)。
Git看到的冲突(请记住,Git逐行运行)是Git在合并基础提交中看到的冲突:
const a = 1;
在两个分支提示提交之一(我们称其为左侧或ours
一个)中,Git看到:
const a = 1;
const b = 1;
对于Git,这看起来像:
const b = 1;
与此同时,在另一个分支提示落实theirs
或右侧,Git看到:
const a = 2;
对于Git,这看起来像:
const a = 2;
两条指令都“触摸” a=1
行,因此Git声明了冲突。
如果您告诉Git支持“我们的” /左侧,Git将保留添加b = 1
行指令,并扔掉 < em>删除a = 1
并插入替换行指令。如果您告诉Git偏爱“他们的” /右侧,Git会保留将a=1
替换为a=2
的指令,但会丢弃另一条指令。< / p>
无论哪种方式,您最终都会遇到错误分辨率。正确的解决方案实际上是接受两个更改,即使它们看起来有冲突。 Git无法自动执行此操作。
在这种情况下,我想将merge.conflictStyle
设置为diff3
。这样,当Git在我的工作树中留下混乱的合并冲突结果时,文件将读取:
<<<<<<< HEAD
const int a = 1;
const int b = 1;
||||||| merged common ancestor
const int a = 1;
=======
const int a = 2;
>>>>>>> master
默认情况下,七根竖线和const int a = 1;
基线丢失了(emem )(有时剩余的线被挤压得更多)。很难读。使用diff3
样式,基线是: :您可以看到每个人的起点,并自行决定是进行两项更改,还是进行一项更改,还是进行第三项更改比任何一个都好。
(另请参见http://psung.blogspot.com/2011/02/reducing-merge-headaches-git-meets.html)