【发布时间】:2018-09-21 05:28:58
【问题描述】:
git reset 的行为是什么,特别是 git reset --hard,而树还没有提交? (就在git init 之后)。它只是删除所有内容?
在编辑 .gitignore 时搞砸了。
在首次提交之前,我尝试对 .gitignore 应用新的更改。所以,要忽略一些新文件,我必须清理索引,然后再次创建git add .。我猜,普通的git reset 不会搞砸,但我用了git reset --hard,因为我的天才。
现在,项目文件夹只包含带有内容的.git文件夹,以及项目的整个文件夹结构,但没有任何文件。为什么?
我可以恢复文件吗?在这种情况下我有什么选择?
UPD
@kowsky 为我指出了正确的方向 - in this answer 他们解释了如何恢复临时存储在 .git/objects(悬空 blob)中的文件,就像我的情况一样(特别是使用 this 工具)。
我恢复了一切,谢谢!
【问题讨论】:
-
如果您没有提交这些更改,那么这些文件几乎会丢失并且无法恢复。您几乎可以始终恢复已提交的数据,但在这种情况下您没有,所以我认为这是不可能的。
-
git status为您提供了取消暂存文件的正确命令(它是git reset HEAD <file>;请注意,--hard不包括在内)。git reset --hard使索引和工作树与您作为参数传递的提交相同。由于您还没有任何提交,因此您的存储库是空的,并且工作树已同步到该存储库。你的文件不见了。 -
你应该这样回答。