如何在提交任何内容之前恢复意外删除的git存储库

如何在提交任何内容之前恢复意外删除的git存储库,git,Git,我决定第一次尝试GitHub,并且已经设法在玩游戏时删除了我最重要项目中的所有文件。以下是我的控制台历史记录: git init git remote add origin https://github.com/... git add . git config --global user.email (...) git config --global user.name (...) git reset --hard // amazing move by me 我寻找了很多方法来恢复它。其中

我决定第一次尝试GitHub,并且已经设法在玩游戏时删除了我最重要项目中的所有文件。以下是我的控制台历史记录:

git init
git remote add origin https://github.com/...
git add .
git config --global user.email (...)
git config --global user.name (...)
git reset --hard   // amazing move by me
我寻找了很多方法来恢复它。其中一项建议是:
git fsck——失物招领
但它只返回:

missing tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
dangling tree 3178c349021f733a9fa7fa0fabd2ac34f8841bdd

没有斑点。那么,恢复它就没有希望了吗?

这很奇怪,因为
缺少的树和
挂起的树
不可能发生,除非有或被提交。是git write tree
从索引(或git
hash object-w-t tree
但这很难使用)构建树对象。(好吧,丢失的树是-我认为hash ID听起来很熟悉!-所以这就不那么奇怪了。)

不过,不管您如何理解这一点,悬挂树对象可能就是您的blob散列ID所在的对象。使用
git show
git ls tree-r
获取文件名和blob散列ID,然后对每个blob ID使用
git show
git cat file-p
获取文件内容,并将这些内容存储在树中找到的名称下


或者,您可以使用:将悬空树转换为提交树。那更好/更方便。(EFTShift 0应该将此转换为答案,您应该接受:-)

git reset--hard
?所以你决定拔枪了,是吗?好。。。。这些blob不会出现,因为它们被那些树指向(一个有根据的猜测)。当我键入
git show 3178c
时,它会显示已删除文件夹和文件的列表。我下一步该怎么办?不幸的是,我什么都没想到。也许是文件拯救计划?从语气上看,我假设这是你程序的唯一副本,你在玩Git之前没有做备份?如果你已经确定了要保留的树,你可能想创建一个指向它的修订?这有点粗俗,但也有可能<代码>git提交树。因此,类似于git提交树3178c-m“恢复我的树”。这将为您提供指向该树(您刚刚创建的修订)的修订ID,然后您可以提供该ID进行签出。如果一切正常,您可以在该修订上创建一个分支,您就完成了。请尽早并经常提交。顺便说一下。。。如果有一个提交有这个树,你可能只需要检查一下
git reflog
,就可以从历史记录中得到这个提交。这就是英雄
gitls tree-r
是帮助我的关键命令。其他人什么也没做。我以后会更小心的,谢谢。