当解决一个文件,我可以相应的Git结帐我们/他们的子模块
git checkout --ours filename
,然后提交的文件有冲突。这将解决冲突。但是,
git checkout --ours submodule
似乎不工作。子模块的引用提交不会更改。
解决子模块引用中的冲突时,等效于git checkout --ours filename
会怎样?
当解决一个文件,我可以相应的Git结帐我们/他们的子模块
git checkout --ours filename
,然后提交的文件有冲突。这将解决冲突。但是,
git checkout --ours submodule
似乎不工作。子模块的引用提交不会更改。
解决子模块引用中的冲突时,等效于git checkout --ours filename
会怎样?
Considering your next question,你可以尝试的三个阶段中的一个结帐你子模块:
git checkout -1 -- submodule # common ancestor
git checkout -2 -- submodule # source
git checkout -3 -- submodule # destination or MERGE_HEAD
一旦一个子模块的gitlink已经改变,别忘了git submodule update
,刷新其内容。
的OP Amiramix是指这个quora answer,其中Berk D. Demir,在Facebook的生产工程师,补充道:
git checkout -1 file
...将从两个分支的祖先签的文件。
这既不是“我们的”也不是“他们的”。这是两个分支分开之前的文件版本。非常方便。如您所知,参数
-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
这可能与GIT 1.7.1的问题。在替代树('-2','--ours'和'HEAD')中,只有'git checkout HEAD子模块'做它应该做的事情。也许所有这三个都适用于更新版本的git。 – Amiramix