git checkout --theirs .
仅获取整个“他们的”文件。
我正在寻找一种使用“我们的”或“他们的”的方法,但仅用于冲突,就像总是删除各自的其他部分和冲突标记一样。
答案 0 :(得分:0)
您可以在开始git merge
操作之前 ,使用-X
选项进行选择。这些选项 1 允许您选择在低级别(文件内部)冲突期间覆盖“我们的”或“他们的”,而不会影响双方无冲突变更的合并。 / p>
如果您已经开始合并并解决了一些冲突,那么中止合并并以-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
提供扩展的选择似乎就不那么混乱了。