查找对象属于哪个提交?

时间:2012-02-20 21:52:46

标签: git

我正在调试由硬盘驱动器故障引起的git存储库损坏的情况。我有

>git fsck --full
fatal: loose object 25e9d8d2deb964c3da0f86f60bbd5a23e8387349 (stored in
.git/objects/25/e9d8d2deb964c3da0f86f60bbd5a23e8387349) is corrupt

>git show 25e9d8d2deb964c3da0f86f60bbd5a23e8387349
fatal: loose object 25e9d8d2deb964c3da0f86f60bbd5a23e8387349 (stored in
.git/objects/25/e9d8d2deb964c3da0f86f60bbd5a23e8387349) is corrupt

现在,我想了解一下这个对象 - 它是什么,它属于哪里? (哪个文件夹,哪个提交?)

当我尝试调查其存储的对象时,我得到:

>git show e9d8d2deb964c3da0f86f60bbd5a23e8387349
fatal: ambiguous argument 'e9d8d2deb964c3da0f86f60bbd5a23e8387349': unknown revision or
path not in the working tree. Use '--' to separate paths from revisions

我该怎么办?

我今天早些时候有一个存储库的副本,但我不想删除我的本地更改 - 我更愿意看看我是否可以修复存储库,或者只是删除一次提交。

P.S。 - 我找到了几个关于“松散物体”问题的线索,但没有关于如何调查/解决的具体说明,如果我在另一个仓库中找到了腐败对象的备份,并且在没有的情况下备份此对象。

P.S。 2 - 奇怪的是,gitk --all运作良好,并不关心这种腐败状态。

1 个答案:

答案 0 :(得分:2)

消息“loose object 25e9d8d2deb964c3da0f86f60bbd5a23e8387349”告诉您已经确切的所述对象的哈希值;它是25e9d8d2deb964c3da0f86f60bbd5a23e8387349。 Git只是通过拆分单独目录的前两个字符来组织子目录中的对象。所以该对象存储在/25/e9d8d2deb964c3da0f86f60bbd5a23e8387349中,但这不会改变它的标识符是完整的哈希值。

因此,您只需要使用git show 25e9d8d2deb964c3da0f86f60bbd5a23e8387349。然而,这会因为对象损坏而失败,因此没有真正的方法来恢复它。

然而,好消息是“松散的对象”意味着没有任何东西指向它,所以如果你的存储库没有问题,你将不需要那个对象。

  

奇怪的是,gitk - all运作良好,并不关心这种腐败状态。

gitk - 以及来自Git的几乎所有其他用户命令 - 只查看可从HEAD或其他命名引用(分支,标记)访问的对象。因此,如果存在松散的对象,则没有任何东西指向它,因此HEAD和其他命名引用都没有指向它,并且没有出现错误。