这与子模块提交的分支不再可用类似,但由于其解决方案不适用的性质而显着不同。
我刚刚克隆了一个存储库,它有子模块,我也完成了子模块更新/初始化。
git clone ... foo && cd foo && git submodule update --init
我在
master
,我想结帐 我想结帐分行 bar
。当我尝试时,它失败了;我从错误和检查存储库中确定 git 无法正确检出子模块,因为子模块指向的提交不再位于该存储库中。
为了完整性,错误是:
致命:无法解压树对象
错误:无法更新子模块“x”。 错误:无法更新子模块: x正在中止
我在这里明白了,git 无法做到这一点,因为无法找到子模块的提交哈希,并且 git 不想将工作存储库置于“混乱状态”,但这似乎让我没有本地修复的方法。
我该怎么做才能更新当前存储库中的子模块以指向有效的提交?
我们暂时假设
git
通过阅读更多文档,听起来我最好的选择是取消初始化遥控器,签出,然后重新添加它。
git submodule deinit x
git checkout <BRANCH>
git rm x
git submodule add <URL for x> x
git add .gitmodules
git add x
git commit -m'resetting submodule x'
然后最终推动它。
但我希望可能有一个更好的答案,因为 deinit、rm 并重新克隆它似乎有点愚蠢。