Git - 致命:引用不是树 - 本地子模块目录已删除

时间:2016-03-30 06:58:02

标签: git github

我有一个包含两个子模块的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. 似乎无法使用我对它们进行的提交来恢复这些子模块。这是真的吗?

  2. 如果#1为真。拉回当前上游子模块的最佳方法是什么(考虑上面的错误)?我可以很容易地手动重现我对子模块的提交。

1 个答案:

答案 0 :(得分:1)

  

似乎无法使用我对它们进行的提交来恢复这些子模块。这是真的吗?

是的,因为您提交了子模块内容,但没有将它们推送到各自的远程回购。

  

如果#1为真。拉回当前上游子模块的最佳方法是什么(考虑上面的错误)?

您需要在之前的状态检查子模块gitlinkspecial entry in the index(表示其文件夹名称),以便这些gitlinks引用其远程仓库中存在的SHA1。<登记/> 从listing their history

开始
git log -- yourSubmodule

选择上一次提交,然后输入:

git show <previouscommit> -- yourSubmodule

您将看到gitlink条目引用的SHA1。

一旦你检查了之前提交的gitlink,git子模块更新--init应该从该gitlink恢复旧SHA1的内容,允许你进入该子模块文件夹并恢复你之前做过的提交。 /> 不要忘记在该子模块中添加,提交并推送,然后再返回到父存储库,添加提交并推送到那里。