假设我们有2个开发分支(master
和feature
),并且两个分支都将一些代码添加到同一个文件中。在尝试将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
答案 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