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.ext
并git add file.ext
以将此文件标记为已解决。 删除file.BASE
,file.THEIRS
使工作树混乱的副本。
您还有一个未解析的文件。 对剩余文件的三个副本重复三个解压缩命令和git merge-file
命令。
(应该有一个面向用户的 Git 命令可以为您完成所有这些操作,但没有。
1我称它们为"扩展选项"或"扩展策略选项",以解释字母X
。 Git 文档只是称它们为"策略选项",这令人困惑,因为-s
选项选择策略,因此是策略选项。 因此,-X
参数是策略选项选项,不同于策略选项。 (正如他们所说,"清澈如泥"。 说-s
是策略选项,-X
提供扩展选项似乎不那么令人困惑。