Git refs头文件无效
当我想在我的存储库中运行Git refs头文件无效,git,version-control,Git,Version Control,当我想在我的存储库中运行git branch、git log或其他命令时,我面临以下错误: fatal: Failed to resolve HEAD as a valid ref. 当我打开.git/HEAD时,我看到了我期望的分支,因为它是我最后一个正在处理的分支: ref: refs/heads/refactoring 当我在.git/refs/heads/中打开任何文件时,总会发现一行字符串如下: 2d73344af3d39ab9c89df71f6696a1b0b65cdca9 但
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
所以很明显,Git不能在其头文件中没有信息的情况下对该分支进行操作
所以有两个问题:
有什么想法吗?我能够恢复我的分支,以下是我是如何做到的:
git checkout validbranch
在分支之间进行更改。我必须通过命令行设置分支:echo-ref:refs/heads/validbranch>.git/HEAD
restorebranch
,并希望将更改提交给该分支。但这引发了以下错误:错误:充气:数据流错误(未知压缩方法)错误:无法解压缩5ec6c4d5cdec15d206058ed6a475eb735f788ab8头致命:5ec6c4d5cdec15d206058ed6a475eb735f788ab8不是有效对象
致命:松散对象abe0fd1236d488160187b91dbf4adeed31104355(存储在.git/objects/ab/e0fd1236d488160187b91dbf4adeed31104355中)已损坏
。我手动删除了那个文件。我不得不运行几次git fsck--lost-found,因为它一次只能指向一个损坏的文件。我需要手动删除大约10个损坏的文件restorebranch
。我将备份粘贴到我的工作目录。令我惊讶的是,我的工作部门没有任何变化。所以我不知道我实际上删除了什么样的对象git branch-D
删除损坏的分支时,它告诉我错误:未找到分支“重构”。
即使在我运行git branch
时它清晰可见。为了修复这个问题,我手动删除了.git/refs/heads/corruptbranch
现在一切都恢复了正常,但在my.git目录中可能仍然有一些曾经属于
Corrupted Branch
的死的、无法访问的对象,现在它们已消失在茫茫之中。您不必手动复制文件。只需创建一个新的(临时)分支。当HEAD仍指向无效分支时,我无法执行此操作。幸运的是,我无法重现此问题,如果尝试,我会收到不同的错误消息。然而,我不认为你的解决方案是黑客,如果它的工作。您位于损坏的存储库中,因此可能需要执行一些不寻常的步骤来修复它。如果它有效,你也可以提供一个答案。它可能会帮助其他有相同问题的人。您只需手动将头文件更改为指向有效分支。删除损坏的分支文件并创建一个新的分支文件。@Zeeker:我就是这么做的。但是如果我想提交曾经属于损坏分支的更改,我会得到:错误:充气:数据流错误(未知压缩方法)错误:无法解包5ec6c4d5cdec15d206058ed6a475eb735f788ab8头致命:5ec6c4d5cdec15d206058ed6a475eb735f788ab8不是有效的对象
大约每两周会清除一次边界,因此对象应该可以平静地休息。顺便说一句。由于您只涉及git对象文件,所以您的工作树(您备份的文件)应该不会发生更改。您可能丢失了一个已删除的提交对象,但由于您没有进行硬重置或签出任何文件,所以您的工作树保持不变。我希望这是可以理解的,我想澄清你的困惑。好吧,也许我丢失了我对已损坏分支的所有提交对象?!我删除了大约10个对象。它加上我对该分支所做的提交的数量。提交对象指向树对象,树对象指向blob对象和其他树对象。我想有些提交出错了,所以相当多的文件被破坏了。看看gitpro书的第二部分,了解git是如何在内部管理历史的。