0

假设我们有 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
4

2 回答 2

1

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

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

尽管如果您经常或大规模执行此操作,您无疑可以为它编写一个脚本(尽管以自动化方式执行此操作可能会破坏您的代码)。

于 2013-04-09T10:41:00.967 回答
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
于 2013-04-09T11:08:17.590 回答