【问题标题】:Git: how to accept "theirs" version of a submodule conflict?Git:如何接受子模块冲突的“他们的”版本?
【发布时间】:2012-06-29 20:39:21
【问题描述】:

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

git checkout --theirs <file>

但这不适用于子模块。在更技术层面上,我所拥有的是一个索引,其中包含阶段 123submodule

$ git ls-files -s module
160000 89b085c4269259fa22632353071e6875f158afde 1       submodule
160000 b9ad3bc8aafdf52a2adf74620afae8934474b82d 2       submodule
160000 1afd42893d18ef5edeeadd67e7c65262505e6004 3       submodule

而我想要的是在舞台0中拥有“他们的”版本:

$ git ls-files -s module
160000 1afd42893d18ef5edeeadd67e7c65262505e6004 0       submodule

更新: 引用 http://fiji.sc/wiki/index.php/Git_submodule_tutorial 的错误断言已删除。

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

【问题讨论】:

  • 您是否尝试从子模块文件夹中执行git checkout --theirs
  • 否,来自父存储库文件夹。
  • 子模块是独立的存储库。有特定的命令来处理它们。
  • 我不想碰子模块仓库,我只想让父仓库的“子模块指针”指向“他们的”而不是“我们的”提交。

标签: git conflict git-submodules


【解决方案1】:

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

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

【讨论】:

  • 所以没有(简单的)方法可以在我的父存储库中将阶段 3 转换为阶段 0,而不触及子模块?
  • @mstrap 您希望您的父存储库工作副本引用“阶段 0”,而子模块工作副本处于“阶段 3”?你为什么要这个?您认为父存储库的工作副本应该如何工作 - 它应该使用“阶段 0”(由 git 引用)还是“阶段 3”(工作副本中的实际文件)?
  • 对于上面的例子,我想在阶段0和阶段1-3中删除“1afd42893d18ef5edeeadd67e7c65262505e6004”,因此子模块的状态将从“冲突”变为“修改”。
  • 我不同意:父存储库将引用的子模块提交存储为单独的信息。此引用可能与实际的子模块 HEAD 不同。您仍然可能是对的,没有办法在不触及子模块本身的情况下更改父存储库中的引用(以便能够执行简单的“git add module”)。
  • 在您的回答中,您建议“将子模块存储库置于您想要的状态”。这是我想要避免的。我认为可能有一些低级 Git 命令来操作我的父存储库 .git/index 文件以产生所需的结果。可能没有。
猜你喜欢
  • 1970-01-01
  • 2014-04-27
  • 2010-10-24
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 2012-03-02
  • 2020-12-16
相关资源
最近更新 更多