我正在运行git 1.6.4.2。垃圾收集失败说“错误:无法找到<SHA1>
”。
我已经设法确定丢失的对象是blob,并且我无法恢复blob文件。似乎运行“git add”和“git commit”的2个脚本同时运行并且设法相互干扰,因此一个文件提交的文件比另一个版本更新,旧版本的blob消失了。
所以我现在要做的就是回滚我的存储库以取出引用缺少blob的树的提交。
我知道提交所在的分支,所以我在其上运行“git reset”以回退到duff提交的父级。而且我知道分支在其他地方合并了,所以我也把那个分支倒了。据我所知,duff commit / tree / blob没有被任何东西引用。但是,如果我运行git prune --expire = now然后是git gc,那么我仍然会收到有关丢失对象的错误。
所以我的问题是:如何查询git数据库以查找包含duff blob id的每个树对象?然后我如何找出导致git prune保留它的原因?
棘手!!
由于 凯文
答案 0 :(得分:11)
经过多一点挖掘后发现我的问题在这里得到了解答:How to delete a blob from git repo - git prune
并未修剪我要回收的东西,因为reflog仍然指的是它。运行
git reflog expire --expire=now --all
解决了这个问题。此外,引用的帖子提供了一种机制,用于在每次提交时运行git lstree
以查找引用的blob。
答案 1 :(得分:5)
我有同样的问题(缺少blob)和
的解决方案git reflog expire --expire=now --all
没有做到这一点。 我在这里找到了我的解决方案:https://git.wiki.kernel.org/index.php/GitFaq#How_to_fix_a_broken_repository.3F
这个简单的行
git hash-object -w <file>
修复了丢失的blob。
希望这有帮助。