2016-12-14 36 views
1

当解决一个文件,我可以相应的Git结帐我们/他们的子模块

git checkout --ours filename 

,然后提交的文件有冲突。这将解决冲突。但是,

git checkout --ours submodule 

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

解决子模块引用中的冲突时,等效于git checkout --ours filename会怎样?

+0

这可能与GIT 1.7.1的问题。在替代树('-2','--ours'和'HEAD')中,只有'git checkout HEAD子模块'做它应该做的事情。也许所有这三个都适用于更新版本的git。 – Amiramix

回答

1

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 
+0

所以,'git checkout -2 - submodule'是否等同于我们的“git checkout -3 - submodule”等价于正常文件合并的“他们的”?此外,我只是合并,我不需要将子模块检出或更新为特定的提交。我可以忽略'git submodule update'并提交合并的更改吗? – Amiramix

+0

@Amiramix是对这两个问题。 – VonC

+0

好的,谢谢,稍后会测试并接受它是否有效。 – Amiramix

相关问题