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 --soft
或git reset
,这是git reset --mixed
的缩写
This 可能会更深入地解释事情。
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 --soft
或git reset
,这是git reset --mixed
This 可能会更深入地解释事情。