解决冲突,有利于我们/他们保持不冲突的更改. 例如



git checkout --theirs .只获取整个"他们的"文件。

我寻找一种使用"我们的"或"他们的"的方法,但仅限于冲突,就好像总是删除相应的其他部分和冲突标记一样。

在开始git merge操作之前,您可以使用-X选项进行选择。 这些选项1允许您选择在低级别(文件内部(冲突期间覆盖"我们的"或"他们的",而不会影响双方非冲突更改的合并。

如果已启动合并并解决了一些冲突,则中止合并并使用-X ours-X theirs重新启动会很痛苦。 这也是不必要的,因为 Git 提供了一个单独的命令git merge-file,它对一组三个输入文件执行三向合并。

因此,假设您开始了合并,它有三个冲突并停止。 如果此时运行git status,则会看到这三个文件未合并。 因此,您手动合并了三个文件中的一个,然后从第二个文件开始,然后想:等等,我想让 Git 为我做这件事。

此时您可以做的是停止手动解析工作树文件。 退出您所在的任何编辑器,返回命令行。 对于三个文件中的第二个,提取所有三个输入:

git show :1:file.ext > file.BASE
git show :2:file.ext > file.OURS
git show :3:file.ext > file.THEIRS

现在,您拥有 Git 尝试自行合并但失败的三个输入。 Git 试图将这三者合并file.ext;这三个输入位于这三个文件中,分别名为.BASE.OURS.THEIRS

您现在可以调用git merge-file并将其传递--ours--theirs,以选择存在冲突的我们或他们的更改:

git merge-file --ours file.OURS file.BASE file.THEIRS

生成的合并将写回file.OURS。 检查它,看看你是否喜欢结果;如果是这样,请将其重命名为file.extgit add file.ext以将此文件标记为已解决。 删除file.BASEfile.THEIRS使工作树混乱的副本。

您还有一个未解析的文件。 对剩余文件的三个副本重复三个解压缩命令和git merge-file命令。

(应该有一个面向用户的 Git 命令可以为您完成所有这些操作,但没有。


1我称它们为"扩展选项"或"扩展策略选项",以解释字母X。 Git 文档只是称它们为"策略选项",这令人困惑,因为-s选项选择策略,因此是策略选项。 因此,-X参数是策略选项选项,不同于策略选项。 (正如他们所说,"清澈如泥"。 说-s是策略选项,-X提供扩展选项似乎不那么令人困惑。

相关内容

最新更新