首页 > 解决方案 > 如何在提交任何内容之前恢复意外删除的 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

我搜索了很多方法来恢复它。一个推荐是: git fsck --lost-found但它只返回:

missing tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
dangling tree 3178c349021f733a9fa7fa0fabd2ac34f8841bdd

并且没有斑点。那么就没有希望挽回了吗?

标签: git

解决方案


这很奇怪,因为除非有提交,否则不会发生missing treedangling tree它是从索引(或 git ,但这很难使用)git write-tree构建树对象。hash-object -w -t tree(嗯,丢失的树是空树——我认为哈希 ID 听起来很熟悉!——所以这有点不奇怪。)

尽管如此,无论你走到这一步,悬空树对象可能就是你的 blob 哈希 ID。使用git showorgit ls-tree -r来获取文件名和 blob 哈希 ID,然后在每个 blob ID 上使用git showorgit cat-file -p来获取文件的内容,并将这些内容存储在您在树中找到的名称下。

或者,您可以使用eftshift0 的技巧:将悬空树变成提交树。那更好/更方便。(eftshift0 应该把它变成一个答案,你应该接受:-))


推荐阅读