等效于git checkout我们/他们的子模块

Gre*_*reg 5 git git-merge git-submodules

解决文件中的冲突时,我可以

git checkout --ours filename
Run Code Online (Sandbox Code Playgroud)

然后提交文件。这样可以解决冲突。然而,

git checkout --ours submodule
Run Code Online (Sandbox Code Playgroud)

似乎不起作用。子模块的引用提交不会更改。

git checkout --ours filename解决子模块引用中的冲突将是什么意思?

Von*_*onC 5

考虑您的下一个问题,您可以尝试检查子模块的三个阶段之一:

git checkout -1 -- submodule # common ancestor
git checkout -2 -- submodule # source
git checkout -3 -- submodule # destination or MERGE_HEAD
Run Code Online (Sandbox Code Playgroud)

一旦子模块的 gitlink 被更改,不要忘记使用git submodule update, 来刷新其内容。

OP Amiramix引用了这个quora 答案,Facebook 的生产工程师Berk D. Demir补充道:

git checkout -1 file
Run Code Online (Sandbox Code Playgroud)

...将从两个分支的祖先中检出文件。
这既不是“我们的”,也不是“他们的”。这是这两个分支分歧之前的文件版本。相当方便。

正如您所猜测的,参数-2是 HEAD 中的版本,并且-3是相应的版本MERGE_HEAD

通过所有其他 git 命令访问这些文件的另一种方法是使用提交的符号引用。与或
git checkout MERGE_HEAD -- file具有相同的效果。--theirs-3

处理合并冲突时另一个方便的语法是路径的冒号-阶段-冒号前缀。 git show :3:file将显示来自 的文件(不是差异)MERGE_HEAD

一个小备忘单:

-1 == $(git merge-base HEAD MERGE_HEAD)
-2 == --ours == HEAD
-3 == --theirs == MERGE_HEAD
Run Code Online (Sandbox Code Playgroud)