Git 子模块混淆



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

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

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

<folder name> → 031c27df078f [031c27df078f]

经过一番混乱,我最终删除了带有更改的本地文件和子模块中的 .git 子文件夹。

我尝试重置为我的第一个提交,但没有文件被恢复。

有什么方法可以从我的主 git 存储库中取回我的更改,还是它们永远丢失了?

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

内部 Git 跟踪文件夹不存在在 s 中,而是列出了一个类似链接的条目,其中包含字母数字,如 SHA 哈希

这些不是子模块,而是简单的 gitlink(索引中的特殊条目(,代表嵌套的 git 存储库 SHA1。
请参阅"嵌套 git 存储库和子模块之间的区别"。

有什么方法可以从我的主 git 存储库中取回我的更改,还是它们永远丢失了?

至少克隆回你的存储库(你推送 gitlinks + 你的代码的那个(:你会在那里找到你的更改。

然后在新的存储库中重新开始,并强制推送。


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

您有

这些内部存储库的 SHA1,希望您有它们的 URL。

因此,在全新的存储库中,添加并提交自己的代码后,这次将这些存储库添加为子模块:

 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 文件夹(,这些机会可能会丢失。

最新更新