Git '致命:没有这样的参考:HEAD'

问题描述 投票:0回答:5

我的 git 存储库发生了一件奇怪的事情。当我尝试在 tortoisegit 窗口中提交某些内容时,我收到了项目中的所有文件。我无法恢复它们,当我从服务器拉取时,我收到

fatal: No such ref: HEAD
fatal: Cannot lock the ref 'HEAD'
。我所有的当地分支机构都不见了。有什么办法可以解决这个问题吗?

这不是第一次提交或其他什么。这件事发生得很突然。

编辑:

git branch -a
说:
Failed to resolve HEAD as a valid ref

git status
打印所有标记为新文件的项目文件。

我更改了存储库文件夹名称一段时间,当我将其更改回来时,情况不正确。

git tortoisegit
5个回答
70
投票

您丢失了

HEAD
,因此您需要重新创建它。最简单的事情就是这样。

echo ref: refs/heads/master >.git/HEAD

现在您应该能够运行其他 git 命令并查看当前位置。

(虽然,理论上,您可以尝试执行

git symbolic-ref HEAD refs/heads/master
较新的 git 版本不会将
.git
识别为 git 存储库,除非它已经包含
HEAD
所以这无法创建新的存储库。 )


7
投票

HEAD
通常是对特定分支的引用;在你的情况下,分支指针似乎丢失了,因此无法解析 HEAD 引用。

您可以使用

git fsck --lost-found
扫描对象缓存以查找无法访问的对象;具体来说,您对提交感兴趣,可以在下面找到它
.git/lost-found/commit/
;这些是指向您的分支的指针,您需要做的就是找出哪个是哪个,并使用
git branch
创建新的引用。


6
投票

我认为这个答案可能对某人有帮助。 我几乎解决了这个问题。 首先我做的是,就像 Charles Bailey 写的那样,使用

echo ref: refs/heads/master >.git/HEAD

然后我的分支变成了master。我提交了更改并能够切换到我的主分支。问题是我无法使用任何当地分支机构。特别是我想在分支 812 上工作。所以我找到了对分支 812 的最后一次提交(提交时创建消息非常有帮助;))并切换到它。接下来,我根据我切换到的分支创建了 812 分支。不幸的是,一些文件丢失了。幸运的是,我把它们放在了我在“echo”之前复制的损坏的仓库中


2
投票

对我来说,问题是在 Mac OS X 上设置了“uchg”或“uappnd”标志,无论权限如何,都会锁定一些 git 文件。 我像这样重置了 chflags,它为我解决了这个问题:

sudo chflags -R 0000 .

0
投票

就我而言,当我尝试

git submodule sync
时,错误发生了。在这种情况下,您需要更新
.git/modules/<submodule_name>/HEAD
文件。

© www.soinside.com 2019 - 2024. All rights reserved.