git reset
的行为是什么,特别是git reset --hard
,而树还没有提交? (就在git init
之后)。它只是删除了一切?
在编辑.gitignore时搞砸了。
在第一次提交之前,我尝试对.gitignore应用新的更改。因此,要忽略一些新文件,我必须清理索引,然后再次生成git add .
。我想,简单的git reset
不应该弄乱,但我使用git reset --hard
,因为我的天才。
现在,项目文件夹只包含带内容的.git文件夹,以及项目的整个文件夹结构,但没有任何文件。为什么呢?
我可以恢复文件吗?在这种情况下我有什么选择?
UPD
.git/objects
(悬空blob)中,就像我的情况一样(特别是使用{{3}工具)。
我恢复了一切,谢谢!
答案 0 :(得分:0)
git reset的行为是什么,特别是
@Lock(LockModeType.PESSIMISTIC_WRITE)
tree还没有提交?
如果您添加文件然后使用git reset --hard
,您的文件将被删除。不会触及未跟踪的文件。
我可以恢复文件吗?
如果你从未添加或提交过文件,git对它们一无所知,也无法恢复它们。但是,可以恢复添加的所有文件。 Here和here是如何恢复它们的答案。
答案 1 :(得分:0)
让我们清楚一点。
您通过运行git init
初始化了git本地存储库,这确实创建了 .git 文件夹,其中将存储所有git工具和对象。
当您对一个全新的空文件夹进行更改时,这些文件将未跟踪,并使用git add .
命令添加它们您所做的就是复制这些更改(每个人)因为你把。在命令前面。)从你的工作目录放到了临时区域。此时,您的工作目录和暂存区域确实包含相同的文件。
你没有提交这些更改,所以当你运行git reset --hard HEAD
时,你基本上是说“将所有内容(暂存区域,工作区域,已提交区域)设置为HEAD指向的提交,在这种情况下是无实际上,在这种情况下,这样做会删除所有内容。
检查this回答,看看是否可以取回这些文件。
为避免这种删除,下次我建议使用git reset --soft
或git reset
这是git reset --mixed
This可能会更深入地解释。