Git子模块混乱

时间:2016-02-12 13:11:31

标签: git bitbucket git-submodules

我创建了一个新项目,其中包含一些已经有git存储库的文件夹。

编辑:内部git存储库未在网上某处上传,也没有在其中进行提交,仅在主要存储库中

当我为初始提交添加git add --all的所有文件并将它们推送到bitbucket时,内部git跟踪文件夹不存在于s中,而是列出类似链接的条目,其中包含像sha一样的字母数字哈希像

<folder name> → 031c27df078f [031c27df078f]

经过一些混乱后,我最终删除了我的本地文件,其中包含子模块中的更改和.git子文件夹。

我努力重置为第一次提交,但没有文件被还原。

有没有办法从我的主git repo中恢复我的更改,还是他们永远丢失了?

有没有办法推送所有文件夹,包括子模块?

1 个答案:

答案 0 :(得分:2)

  

内部git跟踪文件夹不存在于s中,而是列出了类似链接的条目,其中包含像sha hash这样的字母数字

那些不是子模块,而是简单的gitlinkspecial entries in the index)代表嵌套的git repo SHA1。
请参阅“Difference between nested git repos and submodules”。

  

有没有办法从我的主git repo中恢复我的更改,还是他们永远丢失了?

至少克隆回你的仓库(推送gitlinks +代码的那个):你会在那里找到你的变化。

然后从一个新的回购开始,强制推动。

  

有没有办法让内部仓库(现在是一个链接)到我将代码推送到bitbucket时的状态?

你有那些内部回购的SHA1,希望你有他们的网址。

所以在您的全新回购中,一旦您添加并提交了自己的代码,这次将这些回购添加为子模块:

 cd /path/to/new/repo
 git submodule add -- /url/repo1
 cd repo1
 git checkout <SHA1>
 cd ..
 git add repo1 # no trailing slash
 git commit -m "add repo1 as submodule"
 git push -u origin master

然而,OP确实提到:

  

我仍然处于初始状态的文件。但我所做的所有更改都是在粘贴的内容中完成的。另一个重大错误是我创建它时我唯一的提交是在主回购。内部处于初始状态。

在这种情况下(缺少内部.git文件夹),这些机会可能会丢失。