我的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
打印标记为新文件的所有项目文件。
我暂时更改了存储库文件夹名称,当我更改它时,事情就不正确了。
答案 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 .