删除 .git 文件夹后恢复 git 中已删除的文件

Recover delete files in git after removing .git folder

我正在尝试从现有目录推送到存储库,所以我使用

添加了所有文件
git add -A

但后来我意识到我不应该添加节点模块文件夹,所以我做了

git reset --hard

然后我决定一个一个地添加文件夹,中途我意识到我应该先创建 .gitignore 文件所以我决定删除我的所有 git 关系使用

的文件夹
rm -rf .git

在我使用

重新初始化当前文件夹后
git init

当前目录中缺少太多文件。我没有项目的任何备份。关于如何恢复文件的任何想法?

如果您没有备份,或者您的 OS 没有做 "soft deletes"(垃圾桶、回收站等)或者您以绕过它们的方式删除,那么有没有可靠的方法来恢复工作。

.git 目录包含 git 所知道的 关于您的文件的所有内容,除了未跟踪的文件或工作树中的更改。删除 .git/ 几乎从来没有必要,而且非常危险,正如这个问题所不幸说明的那样。您使用的其他命令也比您需要的多 aggressive/dangerous,而且您很可能在此过程的早期就丢失了工作文件。抱歉,这个消息并不好。

供日后参考:

很可能是 reset --hard 删除了您的工作文件。您已经完成了一些添加并想要还原它们,因此 mixed 重置(这是默认设置)就足够了并且会让您的工作树单独存在。硬重置会将您的工作树恢复到提交状态(连同索引)。

重置后您又开始做 adds。我想当您不得不第二次重新开始时,您担心您可能 git 积累了不需要的状态。事实并非如此。另一个 mixed 重置就可以了。您始终可以使用 git status 来确保索引不包含任何意外的内容(如果有则将其清除)。

唯一持久的记录是数据库中的内容,因为您没有提交任何内容,所以您还没有影响数据库。即使你犯下了你想放弃的事情,只要这些事情没有与他人分享,就会有摆脱它们的程序。

总的来说git非常擅长保护你的数据,但它不能保护你没有承诺的东西;因此要求它使用对工作树具有破坏性的命令,或者破坏存储库和元数据(通过删除 .git/)应该只在你非常确定你为什么要这样做。