【问题标题】:Git - remove missing blobs or treesGit - 删除丢失的 blob 或树
【发布时间】:2017-01-02 11:48:53
【问题描述】:

有没有办法从历史记录中删除对丢失的 blob 或树的引用?这是git fsck --full的输出

broken link from    tree 99fe1a9d46985ca21e88de53a7a290e2b1889722
              to    blob bf70d7b3bf98852e13dd0b3b8499ad5d77f174d9
broken link from    tree e3dbfdf73cb5c9971b95b33da5fc93f5d69acdae
              to    tree 5d02b92042c23945f41c5a895e5fc7f4d5a4988d
missing blob bf70d7b3bf98852e13dd0b3b8499ad5d77f174d9
missing blob 1d918846d68d8a8368cc442b6d5989d275944c39
dangling blob 42c2d0f36c782a48f793f6c381578e0e5611b602
missing tree 5d02b92042c23945f41c5a895e5fc7f4d5a4988d
missing blob e9d2ae0e7d9c30dec40a116a12a97567e29a87d2
dangling blob 1aa5f9b48ea74f4a75aa848c571f223995c36658
dangling blob 94055e2bdcc4399c5563327ff879864c59c95e40
dangling commit 2b46b23ef705d48c03ed2526cad6548d1608644b
missing blob 5f5e29e93984bdb1a4bc3be2ba7ebaba1e595e75

我的猜测是 pullpushgit move 被打断了。我还找出了大多数丢失的 blob 引用的文件,但我无法恢复它们,因为它们已经被修改过,而且我无法重建更改(我认为;但我是 git 新手)。

gcprunereflog --expire=now 没有帮助。

有没有办法告诉git“没关系,伙计,我对当前HEAD的当前状态很好”?

【问题讨论】:

    标签: git git-fsck


    【解决方案1】:

    中断 Git 不会这样做。在某些更新过程中让您的系统崩溃(重新启动)可能会这样做,但普通中断不会。磁盘故障也会这样做。

    请参阅 Repair corrupted git repositoryHow to fix corrupted git repository? 我只会将其标记为重复,但我不确定其中哪一个是更好的问答(尽管我自己有点倾向于第二个)。

    【讨论】:

    • 似乎很公平。我觉得第二个更准确地描述了我的情况。随意标记为重复。
    • 后续问题:当我尝试恢复到可能未损坏的提交时,我收到以下消息:error: unable to read sha1 file of LWS/code/lis_training_2.R (e9d2ae0e7d9c30dec40a116a12a97567e29a87d2) ... fatal: Could not reset index file to revision '7b9ae3ce'。我在远程备份 .git 文件夹中确实有丢失的对象,但是我从 git --hash-object -w 获得的哈希值与我在错误消息中获得的哈希值不同。有什么建议吗?
    • 你在给git hash-object -w喂什么?通常,如果您有一个丢失或损坏对象的良好备份,您可以并且应该简单地将其复制到.git/objects/ 中的适当位置(使用原始路径名,例如,对象 abcde... 变为 ab/cde...)。
    • 如果我以上面的例子为例,我的备份中有LWS/code/list_training_2.R,但我的备份.git/objects/e9 中没有对象d2ae...。我在备份中有两个文件.git/objects/,一个.idx 和一个.pack。我猜我需要打开后者的包装?这超出了我的 git 技能,文档现在对我来说没有多大意义。
    • 做到了。万分感谢。供将来参考:我将pack 文件解压缩到我的工作目录的子目录中(如果您像我一样不理解git unpack-objects 文档,请参阅here)。然后我手动将丢失的 blob 复制到适当的 .git/objects/... 文件夹中。对象abcdeab/cde... 中的提示至关重要。
    猜你喜欢
    • 1970-01-01
    • 2014-09-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2011-01-13
    相关资源
    最近更新 更多