在解决git merge冲突时合并这两个更改

时间:2013-04-09 10:16:13

标签: git git-merge

假设我们有2个开发分支(masterfeature),并且两个分支都将一些代码添加到同一个文件中。在尝试将feature合并到master时,我们遇到了一个混乱:

++<<<<<<< HEAD
+ //some code added in master branch
++=======
+ //some code added in feature branch
++>>>>>>> feature

如果我只想接受HEAD(主人)并放弃feature我会跑:

git checkout --ours path/to/file

如果我只想接受feature(主人)并放弃HEAD我会跑:

git checkout --theirs path/to/file

我如何接受这两个更改,以便解决冲突的结果就像代码的简单结合一样?

//some code added in master branch
//some code added in feature branch

2 个答案:

答案 0 :(得分:1)

您必须手动编辑文件,并删除冲突标记(如果您只是这样做,结果就是您想要的“联合”)。

Git不会这样做,因为冲突解决是程序无法提供一般解决方案的语义问题。

虽然如果你经常或大规模地这样做,你无疑会为它编写一个脚本(以自动方式执行此操作可能会破坏你的代码)。

答案 1 :(得分:0)

正如Nevik指出的那样,简单地删除标记会导致代码的结合。 这是我的bash脚本完成这项工作:

function git.both() {
  filename=$1
  tempfilename="temp_file_used_by_git_both"
  grep -v "<<<<<<<\|>>>>>>>\|=======" $filename > $tempfilename
  mv $tempfilename $filename

}

用法:

git.both path/to/file