解决冲突以支持 our/their 保持不冲突的更改
Resolve conflicts in favor of our/their keeping unconflicting changes
git checkout --theirs .
例如只需要整个 "theirs" 文件。
我正在寻找一种使用 "ours" 或 "theirs" 的方法,但仅限于冲突,就好像总是删除各自的其他部分和冲突标记。
您可以,在开始git merge
操作之前,使用-X
选项选择那个。这些选项1 允许您选择在低级别(文件内)冲突期间覆盖 "ours" 或 "theirs",而不影响非双方的冲突变化。
如果您已经开始合并并解决了一些冲突,则中止合并并使用 -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
副本。
您还有 1 个未解决的文件。对剩余文件的三个副本重复三个提取命令和 git merge-file
命令。
(应该有一个面向用户的 Git 命令可以为您完成所有这些,但没有。)
1我称他们为"eXtended options"或"eXtended strategy options"来占字母X
。 Git 文档只称它们为 "strategy-options",这令人困惑,因为 -s
选项选择策略,因此是策略选项。 -X
参数因此是 strategy-option 选项,与 strategy 选项不同。 ("Clear as mud",正如他们所说。)说 -s
是策略选项,-X
提供扩展选项似乎不那么令人困惑。
git checkout --theirs .
例如只需要整个 "theirs" 文件。
我正在寻找一种使用 "ours" 或 "theirs" 的方法,但仅限于冲突,就好像总是删除各自的其他部分和冲突标记。
您可以,在开始git merge
操作之前,使用-X
选项选择那个。这些选项1 允许您选择在低级别(文件内)冲突期间覆盖 "ours" 或 "theirs",而不影响非双方的冲突变化。
如果您已经开始合并并解决了一些冲突,则中止合并并使用 -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
副本。
您还有 1 个未解决的文件。对剩余文件的三个副本重复三个提取命令和 git merge-file
命令。
(应该有一个面向用户的 Git 命令可以为您完成所有这些,但没有。)
1我称他们为"eXtended options"或"eXtended strategy options"来占字母X
。 Git 文档只称它们为 "strategy-options",这令人困惑,因为 -s
选项选择策略,因此是策略选项。 -X
参数因此是 strategy-option 选项,与 strategy 选项不同。 ("Clear as mud",正如他们所说。)说 -s
是策略选项,-X
提供扩展选项似乎不那么令人困惑。