我有一个指向无效提交的子模块的项目:子模块提交仍然是本地的,当我试图从另一个repo获取它时,我得到:
$ git submodule update
fatal: reference is not a tree: 2d7cfbd09fc96c04c4c41148d44ed7778add6b43
Unable to checkout '2d7cfbd09fc96c04c4c41148d44ed7778add6b43' in submodule path 'mysubmodule'
我知道子模块HEAD应该是什么,有没有办法我可以在本地改变这个,而不从已经提交2d7cfbd09fc96c04c4c41148d44ed7778add6b43的回购?
我不确定我是否说清楚了…我发现了一个类似的情况。
可能的原因
这可能发生在以下情况:
子模块已编辑到位
提交子模块,更新所指向的子模块的散列
没有推送子模块。
例如:发生了这样的事情:
$ cd submodule
$ emacs my_source_file # edit some file(s)
$ git commit -am "Making some changes but will forget to push!"
此时应该已经推送了子模块。
$ cd .. # back to parent repository
$ git commit -am "updates to parent repository"
$ git push origin master
因此,远程用户不可能找到丢失的提交,因为它们仍然在本地磁盘上。
解决方案
通知修改子模块以推送的人,即。
$ cd submodule
$ git push