Git:如何接受子模块冲突的“他们的”版本?

mst*_*rap 6 git conflict git-submodules

如果发生子模块冲突(即,当合并的两个提交包含所引用提交的不同更改)时,如何轻松地将子模块设置为“其”提交?如果是文件,我将执行:

git checkout --theirs <file>
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于子模块。在一个更为技术的层面,我有什么是包含索引submodule的阶段123

$ git ls-files -s module
160000 89b085c4269259fa22632353071e6875f158afde 1       submodule
160000 b9ad3bc8aafdf52a2adf74620afae8934474b82d 2       submodule
160000 1afd42893d18ef5edeeadd67e7c65262505e6004 3       submodule
Run Code Online (Sandbox Code Playgroud)

我想要的是在阶段0获得“他们的”版本:

$ git ls-files -s module
160000 1afd42893d18ef5edeeadd67e7c65262505e6004 0       submodule
Run Code Online (Sandbox Code Playgroud)

更新:删除了有关参考http://fiji.sc/wiki/index.php/Git_submodule_tutorial的错误断言。

更新2:添加了与索引相关的示例。

pen*_*tur 2

您的父存储库仅指子模块存储库的当前工作版本。“子模块指针”始终指向子模块的工作副本。

因此,您必须将子模块存储库置于您想要的状态(在这种特定情况下,通过将其更新为“他们的”版本)。之后,“子模块指针”将自动更新自身(当然,您必须提交更改)。

  • 我不同意:父存储库将引用的子模块提交存储为单独的信息。该引用可能与实际的子模块 HEAD 不同。不过,您可能是对的,没有办法在不接触子模块本身的情况下更改父存储库中的引用(以便能够执行简单的“git add module”)。 (2认同)