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
我搜索了很多方法来恢复它。一个推荐是:
git fsck --lost-found
但它只返回:
missing tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
dangling tree 3178c349021f733a9fa7fa0fabd2ac34f8841bdd
并且没有斑点。那么就没有希望挽回了吗?
解决方案
这很奇怪,因为除非有提交,否则不会发生missing tree
。dangling tree
它是从索引(或 git ,但这很难使用)git write-tree
构建树对象。hash-object -w -t tree
(嗯,丢失的树是空树——我认为哈希 ID 听起来很熟悉!——所以这有点不奇怪。)
尽管如此,无论你走到这一步,悬空树对象可能就是你的 blob 哈希 ID。使用git show
orgit ls-tree -r
来获取文件名和 blob 哈希 ID,然后在每个 blob ID 上使用git show
orgit cat-file -p
来获取文件的内容,并将这些内容存储在您在树中找到的名称下。
或者,您可以使用eftshift0 的技巧:将悬空树变成提交树。那更好/更方便。(eftshift0 应该把它变成一个答案,你应该接受:-))
推荐阅读
- javascript - 如何使用 javascript 或 jquery 从 arrayList 中删除对象?
- amazon-ecs - Amazon Fargate - 确定容器启动顺序
- jquery - 匹配逗号分隔的数据属性值
- apache-kafka - Apache Kafka 的工作流引擎?
- python - 在 keras 中加载模型后的不同预测
- angular - 所需的请求部分“文件”不存在-Java Spring 和 Angular 7
- statistics - 贝叶斯网络关键收益
- vue.js - 如何使用 :value 复制 v-models :value?
- c++ - 为什么这个模板化继承不起作用?
- c++ - 再次不稳定:有必要防止优化?