3 回答
TA贡献1802条经验 获得超4个赞
如果您有上演git的任何东西,您应该应该能够将其恢复。(如果您只是更改了工作副本,则将无法还原它。)
首先:你不运行git gc。在继续之前,请备份您的存储库和工作副本。(请确保备份.git目录。)也请避免在发生这种情况的情况下关闭终端和/或重新引导-如果所有操作均失败,则您有机会在历史记录/内存中查找内容。
无论如何,首先要尝试的是:
git fsck-丢失了
它将打印类似
检查对象目录:100%(256/256),已完成。
检查对象:100%(30165/30165),已完成。
悬空Blob 8f72c7d79f964b8279da93ca8c05bd685e892756
悬空提交4993502a6394491190d3f4d6fb3d1e14019c2e9b
由于您丢失了暂存文件并且没有进行提交,因此您对dangling blob条目感兴趣。
git show <sha>逐一运行-其中一些应该是您的文件。
TA贡献1886条经验 获得超2个赞
一个很晚的答案可以通过更快地找出应该恢复哪些斑点来简化恢复:
git fsck --full --no-reflogs --unreachable --lost-found | grep blob | cut -d\ -f3 | while read in; do printf "blob: $in\n"; git cat-file -p $in; printf "\n--------------------------------\n"; done > recover.txt
此命令将创建一个文件,其中包含可以恢复的每个Blob的哈希值以及该Blob的内容。
这样,您可以轻松搜索该文件并使用给定的哈希值恢复所需的Blob(使用命令git cat-file -p 8f72c7d79f964b8279da93ca8c05bd685e892756 > myFile.txt)
PS:如果您有很多无法访问的Blob,此文件可能会变得很大。
- 3 回答
- 0 关注
- 1785 浏览
添加回答
举报