我有一个包含两个子模块的GitHub存储库。我对这些子模块进行了一些更改并提交了它们。但是,似乎我没有正确地做到这一点。
我最近丢失了我的本地存储库副本,并且正在尝试克隆该遥控器。但是,当我跑
时git clone --recursive myrepo.git
我收到错误:
fatal: reference is not a tree: ...
Unable to checkout ... in submodule path....
Unable to checkout ... in submodule path....
当我点击子模块链接GitHub时,我收到404错误。
我有两个问题。
似乎无法使用我对它们进行的提交来恢复这些子模块。这是真的吗?
如果#1为真。拉回当前上游子模块的最佳方法是什么(考虑上面的错误)?我可以很容易地手动重现我对子模块的提交。
答案 0 :(得分:1)
似乎无法使用我对它们进行的提交来恢复这些子模块。这是真的吗?
是的,因为您提交了子模块内容,但没有将它们推送到各自的远程回购。
如果#1为真。拉回当前上游子模块的最佳方法是什么(考虑上面的错误)?
您需要在之前的状态检查子模块gitlink,special entry in the index(表示其文件夹名称),以便这些gitlinks引用其远程仓库中存在的SHA1。<登记/> 从listing their history
开始git log -- yourSubmodule
选择上一次提交,然后输入:
git show <previouscommit> -- yourSubmodule
您将看到gitlink条目引用的SHA1。
一旦你检查了之前提交的gitlink,git子模块更新--init应该从该gitlink恢复旧SHA1的内容,允许你进入该子模块文件夹并恢复你之前做过的提交。 /> 不要忘记在该子模块中添加,提交并推送,然后再返回到父存储库,添加提交并推送到那里。