是否可以恢复“git rm -r -f <directory>”命令?</directory>

时间:2012-01-31 11:32:07

标签: git git-rm

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

git init

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

git add directory
git status

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

git rm directory

此时我应该正确阅读控制台消息和文档....但没有。所以我跑了

git rm directory -r -f

咦?我的目录在哪里?啊,好吧,git删除了它,所以它“不在那里”了。所以试试吧,

git status
git reset --hard

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

git rm -r --cached directory

会将其从提交列表中删除,但来自我的文件系统。哎呦。幸运的是没有什么严重的遗失。

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

是否可以取回这些文件?

2 个答案:

答案 0 :(得分:6)

  

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

  

是否可以取回这些文件?

答案是

没有提交,因此您没有使用源代码管理。

文件从未进入对象数据库。一般来说,你永远不能在git中获得未经注释的东西。您通常可以获得以前承诺的东西。

经验法则:经常提交

修改

另见

  

我今天偶然在我的回购邮件上运行git reset --hard,同时今天也有未提交的更改。为了得到它,我运行了git fsck --lost-found,它将所有未引用的blob写入<path to repo>/.git/lost-found/。由于文件未提交,我在other内的<path to repo>/.git/lost-found/目录中找到了它们。从那里,我可以看到未提交的文件,复制blob,并重命名它们。

     

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

答案 1 :(得分:2)

我做了同样的错误,但是尽管早些时候在git索引中添加了文件,我无法使用'git fsck --lost-found'恢复它们。幸运的是,我记得我的IDE中的“本地历史记录”跟踪选项,所以使用它,没有任何问题我恢复了除了库二进制文件之外的所有代码:)