当我想在我的存储库中运行git branch
,git log
或其他命令时,我面临以下错误:
fatal: Failed to resolve HEAD as a valid ref.
当我打开.git/HEAD
时,我看到了我期待的分支,因为这是我正在处理的最后一个分支:
ref: refs/heads/refactoring
当我打开.git/refs/heads/
中的任何文件时,我总是找到一行包含这样的字符串:
2d73344af3d39ab9c89df71f6696a1b0b65cdca9
但如果我打开.git/refs/heads/refactoring
,我看到的只是一堆零:
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 00
很明显,当HEAD文件中没有信息时,Git无法在该分支上运行。
所以有两个问题:
我要求一个正确的方法,因为我能想到的只有:
但这对我来说听起来太过苛刻了。
有什么想法吗?
答案 0 :(得分:2)
我能够恢复我的分支,我就是这样做的:
git checkout validbranch
在分支之间进行更改。我必须通过命令行设置分支:echo ref: refs/heads/validbranch > .git/HEAD
。restorebranch
,并希望将更改提交到该分支。但是这引发了以下错误:error: inflate: data stream error (unknown compression method) error: unable to unpack 5ec6c4d5cdec15d206058ed6a475eb735f788ab8 header fatal: 5ec6c4d5cdec15d206058ed6a475eb735f788ab8 is not a valid object
git fsck --lost-found
,它指向了已损坏的文件:fatal: loose object abe0fd1236d488160187b91dbf4adeed31104355 (stored in .git/objects/ab/e0fd1236d488160187b91dbf4adeed31104355) is corrupt
。我手动删除了该文件。我不得不多次运行git fsck --lost-found
,因为它一次只能指向一个损坏的文件。我需要手动删除大约10个损坏的文件。restorebranch
。我将备份粘贴到我的工作目录。令我惊讶的是,我的工作分支似乎没有变化。所以我不知道我实际删除了哪种对象。git branch -D
删除损坏的分支时,它告诉我error: branch 'refactoring' not found.
,即使我在运行git branch
时清晰可见。为了解决这个问题,我手动删除了.git/refs/heads/corruptbranch
。现在一切都恢复正常了,但是我的.git目录中可能还有一些死的,无法访问的对象曾经属于corruptedbranch
,现在已经陷入困境。