Git子模块混乱

3
我创建了一个新项目,其中包含一些已经有git仓库的文件夹。
编辑:内部git仓库没有上传到网络上,并且没有在其中进行任何提交,只在主仓库中进行了提交。
当我使用git add --all添加所有文件进行初始提交并将它们推送到Bitbucket时,内部被跟踪的git文件夹未出现在列表中。相反,列出了类似于sha哈希值的字母数字链接条目。
<folder name> → 031c27df078f [031c27df078f]

在一些混乱之后,我不小心删除了包含更改和子模块中 .git 子文件夹的本地文件。

我尝试了强制回退到我最初的提交,但是没有文件被还原。

是否有办法从我的主 git 存储库中恢复更改,或者它们永远丢失了?

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

1个回答

2
“内部 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 文件夹),这些更改可能已经丢失了。

@antoniskamamis 当然可以。我已经编辑了答案来解决这个问题。 - VonC
我的解释不好,但我没有在网上找到内部代码库。Bitbucket 是否可以为我上传它? - eltonkamami
@Bitbucket没有注册那些仓库的URL,只有它们的SHA1。这些仓库只是你电脑上的本地仓库吗? - VonC
我仍然拥有最初状态的文件。但是所有的更改都是在粘贴的文件中完成的。另一个大错误是,当我创建它时,我的唯一提交是在主存储库上进行的。内部存储库处于最初状态。 - eltonkamami
@antoniskamamis 如果没有原始的.git文件夹,恢复更改的机会将很小(特别是如果这些更改甚至没有添加到那些存储库的索引中)。 - VonC
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接