【发布时间】:2019-06-14 11:59:31
【问题描述】:
git add * 向暂存索引添加了一堆更改,但尚未提交,我想删除它们,撤消添加,所以我git rm -rf . 令我惊讶的是,它把它们从我的硬盘中删除了,我想要一种方法把它们找回来;但是,我已经做出了巨大的改变,我想恢复这些改变。
TLDR:我通过git rm -rf . 删除了我的整个项目,我需要一些方法来重置删除,以便我保留未提交的更改并取回我的文件。拜托我太害怕我可能会失去我的整个项目。
回答:我的存储库基本上是一个包含大量内容的网站,根据下面的答案,我制作了 2 个存储库副本,我们称它们为副本 A 和副本 B,对于 A 我做了git reset --hard 回到最新的提交,我找回了我的文件,但丢失了我对它们所做的更改。所以对于副本 B,我做了git fsck --lost-found 并进入了 .git/lost-found/other/ 目录,其中包含我的文件的多个以哈希命名的版本,我一直打开它们,顺便说一句,它们有 60 多个文件,我认识的每个文件我都将其重命名为它的实际名称,然后将它而不是旧版本放在副本 A 中,最后我删除了我的原始存储库,我现在使用副本 A 作为我的网站。就像现在什么都没有发生一样。一个小小的愚蠢错误 => 5 小时的痛苦。不要重复我所做的,永远不要。
现在git status 将我所有的文件都显示为“已删除:”并且它是绿色的。
【问题讨论】:
-
我觉得你运气不好。如果您输入了
rm -rf .,那么您的更改仍然会在Git 的索引中,但是通过使用git rm,磁盘上的索引和工作副本都会更新。但以防万一我错了,在您进行任何实验之前,请复制整个项目目录,包括.git目录。 -
是的,我学得很辛苦,如果你弄乱了 git,git 就会弄乱你。在我参加的任何 git 课程中必须教授的第 1 条规则是,如果您不确定自己在做什么,请复制一份。
-
进一步思考,可能是以前版本的索引,或者至少其中包含的文件,仍然作为 blob 存在于您的存储库中。希望对此有更多了解的人会加入。
-
Commits 被永久保存(或者至少,只要您仍然可以找到哈希 ID,请参阅 Think Like (a) Git 了解详细信息)。您在索引和工作树中积极处理的内容不会永远保存。