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

时间:2011-01-31 07:39:48

标签: git tortoisegit

我的git存储库发生了一件奇怪的事情。当我尝试在tortoisegit窗口中提交某些内容时,我会收到项目中的所有文件。我无法恢复它们,当我从服务器拉出时,我收到fatal: No such ref: HEADfatal: Cannot lock the ref 'HEAD'。我所有的本地分支都不见了。有什么方法可以解决这个问题吗?

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

编辑:

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

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

我暂时更改了存储库文件夹名称,当我更改它时,事情就不正确了。

4 个答案:

答案 0 :(得分:67)

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

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

现在你应该能够运行其他git命令,看看你在哪里。

(虽然理论上你可以尝试git symbolic-ref HEAD refs/heads/master更新的git版本,但不会将.git识别为git存储库,除非它已经包含HEAD所以这个赢了“努力创造一个新的。)

答案 1 :(得分:6)

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

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

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:2)

对我来说,问题是在Mac OS X上设置了'uchg'或'uappnd'标志,锁定了一些git文件而不管perms。我重置了这样的chflags,它为我解决了它:

sudo chflags -R 0000 .