【发布时间】:2014-09-26 09:11:30
【问题描述】:
当我想在我的存储库中运行 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 无法对该分支进行操作。
那么两个问题:
- 怎么会这样?
- 如何以正确的方式恢复它?
我要求一个正确的方法,因为我能想到的是:
- 由于损坏的分支仍处于签出状态,请手动复制所有文件。
- 将 HEAD 文件中的 ref 更改为工作分支。
- 删除损坏的分支。
- 签出具有相同或不同名称的新分支。
- 从备份中添加文件并提交。
但这听起来对我来说太老套了。
有什么想法吗?
【问题讨论】:
-
您不必手动复制文件。只需创建一个新的(临时)分支。
-
当 HEAD 仍然指向无效分支时我不能
-
不幸的是,我无法重现该问题,如果我尝试重现,我会收到不同的错误消息。但是,如果它有效,我认为您的解决方案不会是 hacky。您处于损坏的存储库中,因此您可能必须执行一些不寻常的步骤来修复它。如果它有效,您也可以提供它作为答案。它可能会帮助其他有同样问题的人。
-
您可以手动更改 HEAD 文件以指向有效分支。删除损坏的分支文件并创建一个新的。
-
@Zeeker:我就是这么做的。但是,如果我想提交曾经属于损坏分支的更改,我会得到:
error: inflate: data stream error (unknown compression method) error: unable to unpack 5ec6c4d5cdec15d206058ed6a475eb735f788ab8 header fatal: 5ec6c4d5cdec15d206058ed6a475eb735f788ab8 is not a valid object
标签: git version-control