【问题标题】:"no branch" on git submodulegit子模块上的“无分支”
【发布时间】:2018-11-18 20:13:53
【问题描述】:
我正在开发一个 git 项目,该项目依赖于一个 git 子模块,该模块指向一个对主项目不可用的过时提交。在成功将此子模块的主分支更新为我想使用的提交后,从外部存储库中获取,我回到子模块的父项目,主项目,并发出git submodule update,据我所知这是正确的让家长知道更新的方法。但是,如果我现在移回子模块文件夹,我会看到我在(无分支)上,这仍然是旧的不可用提交的分支。在子模块中,我确实看到了更新后的主分支到我想使用的版本。这使我认为我没有设法将子模块正确更新为我的首选提交。还是我不应该从主项目更新子模块?
谢谢!
【问题讨论】:
标签:
git
git-branch
git-submodules
【解决方案1】:
这是一个简单的错误:
在成功更新这个子模块的主分支到我想使用的提交后,从外部存储库抓取,我回到子模块的父项目,主项目,
到目前为止还不错,但是:
并发出git submodule update
否:这会将子模块拉回记录的旧快照。
在让子模块进入所需状态后,你想做的就是像你一样回到超级项目,然后运行:
git add path/to/submodule
这会更新您的索引/暂存区域,就像 git add 将常规文件复制到您的索引中一样。
最终——当所有文件和子模块哈希都正确时——你应该运行git commit 进行新的提交。新提交保存新快照,其中包括子模块的新哈希 ID,只要 此 提交被签出,子模块就会处于“无分支/分离 HEAD”模式。
请注意,与常规文件不同,签出提交不会将子模块放到正确的提交上;只有git submodule update 这样做。