5

我正在设置我的第一个 git 存储库并执行了以下操作,

git init

跟着一些 git-config 的东西来设置远程服务器。然后我做了

git add directory
git status

哎呀,我添加了一些我不想要的文件。好的,所以我应该 git rm 从提交列表中删除目录并重新开始

git rm directory

在这一点上,我应该已经正确阅读了控制台消息和文档......但没有。所以我跑了

git rm directory -r -f

嗯?我的目录去哪儿了?啊,好吧,git 已经删除了它,所以它不再“不存在”了。所以让我们试试,

git status
git reset --hard

在没有成功,一些错误信息和一堆网络搜索之后,我意识到我的失礼。我应该用

git rm -r --cached directory

这会将其从提交列表中删除,但不会从我的文件系统中删除。哎呀。幸运的是,没有什么严重的损失。

似乎应该有一种方法可以从中恢复,但我的大部分搜索最终都指向“--cached”选项......这有点晚了。没有提交,所以我不能只恢复/拉取文件(只有一个本地副本)。

是否有可能取回这些文件?

4

2 回答 2

6

没有提交,所以我不能只恢复/提取文件(只有一个本地副本)

是否有可能取回这些文件?

答案是否定的。

没有提交,因此您没有使用源代码控制。

这些文件从未进入对象数据库。一般来说,你永远无法在 git 中获得未提交的内容。您通常可以取回以前提交的内容。

经验法则:经常提交

编辑

也可以看看

我今天也意外地运行git reset --hard了我的 repo,而今天也有未提交的更改。为了取回它,我跑了git fsck --lost-found,它将所有未引用的 blob 写入<path to repo>/.git/lost-found/. 由于文件未提交,我other<path to repo>/.git/lost-found/. 从那里,我可以看到未提交的文件、复制 blob 并重命名它们。

注意:这仅在您将要保存的文件添加到索引时才有效(使用git add .)。如果文件不在索引中,它们就会丢失。

于 2012-01-31T12:34:12.910 回答
2

我犯了完全相同的错误,但尽管之前将文件添加到 git 索引,但我无法使用“git fsck --lost-found”恢复它们。幸运的是,我记得我的 IDE 中的“本地历史记录”跟踪选项,所以使用它,没有问题我恢复了除库二进制文件之外的所有代码 :)

于 2013-01-01T16:05:54.967 回答