Git-reset - hard而没有提交

时间:2018-04-11 10:53:51

标签: git git-reset

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)中,就像我的情况一样(特别是使用{{3}工具)。 我恢复了一切,谢谢!

2 个答案:

答案 0 :(得分:0)

  

git reset的行为是什么,特别是@Lock(LockModeType.PESSIMISTIC_WRITE)   tree还没有提交?

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

  

我可以恢复文件吗?

如果你从未添加或提交过文件,git对它们一无所知,也无法恢复它们。但是,可以恢复添加的所有文件。 Herehere是如何恢复它们的答案。

答案 1 :(得分:0)

让我们清楚一点。

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

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

enter image description here

你没有提交这些更改,所以当你运行git reset --hard HEAD时,你基本上是说“将所有内容(暂存区域,工作区域,已提交区域)设置为HEAD指向的提交,在这种情况下是无实际上,在这种情况下,这样做会删除所有内容。

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

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

的缩写

This可能会更深入地解释。