Git-reset --hard 还没有提交

Git-reset --hard while no commits yet

git reset 的行为是什么,特别是 git reset --hard,而 tree 还没有提交? (就在 git init 之后)。它只是删除所有内容?

编辑时搞砸了。git忽略。 在进行首次提交之前,我尝试对 .gitignore 应用新的更改。因此,要忽略一些新文件,我必须清理索引,然后再次创建 git add .。我想,普通的 git reset 不会弄得一团糟,但由于我的天才,我使用了 git reset --hard

现在,项目文件夹只包含有内容的.git文件夹,以及项目的整个文件夹结构,没有任何文件。为什么?

我可以恢复文件吗?在这种情况下我有什么选择?

UPD

@kowsky 为我指出了正确的方向 - in this answer they explain how to recover files, that are temporarily stored in .git/objects (dangling blobs), like in my case (particularly, using this 工具)。 我恢复了一切,谢谢!

What is behavior of git reset, specifically git reset --hard, while tree has no commits yet?

如果您添加文件然后使用 git reset --hard,您的文件将被删除。未跟踪的文件不会被触及。

Can I recover the files?

如果您从未添加或提交过这些文件,git 对它们一无所知,也无法恢复它们。但是,可以恢复所有添加的文件。 Here and 是关于如何恢复它们的答案。

让我们清理一下。

您通过 运行ning git init 初始化了 git 本地存储库,这确实创建了 .git 文件夹,其中所有 git 工具和对象都将被存储。

当您对一个全新的空文件夹进行更改时,这些文件将未被跟踪,通过使用 git add . 命令添加它们,您所做的是将这些更改(自从您将 . 放在命令前面以来的每个人)从您的工作目录复制到暂存区域。此时您的工作目录和暂存区确实包含相同的文件。

您没有提交这些更改,所以当您 运行 git reset --hard HEAD 时,您基本上是在说“按照提交 HEAD 指向的方式创建所有内容(暂存区、工作区、提交区),在这种情况下是 none,实际上它在这种情况下所做的是删除所有内容。

检查 this 答案以查看是否可以取回这些文件。

为了下次避免这种删除,我建议使用git reset --softgit reset,这是git reset --mixed

的缩写

This 可能会更深入地解释事情。