我的 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
打印所有标记为新文件的项目文件。
我更改了存储库文件夹名称一段时间,当我将其更改回来时,情况不正确。
您丢失了
HEAD
,因此您需要重新创建它。最简单的事情就是这样。
echo ref: refs/heads/master >.git/HEAD
现在您应该能够运行其他 git 命令并查看当前位置。
(虽然,理论上,您可以尝试执行
git symbolic-ref HEAD refs/heads/master
较新的 git 版本不会将 .git
识别为 git 存储库,除非它已经包含 HEAD
所以这无法创建新的存储库。 )
HEAD
通常是对特定分支的引用;在你的情况下,分支指针似乎丢失了,因此无法解析 HEAD 引用。
您可以使用
git fsck --lost-found
扫描对象缓存以查找无法访问的对象;具体来说,您对提交感兴趣,可以在下面找到它.git/lost-found/commit/
;这些是指向您的分支的指针,您需要做的就是找出哪个是哪个,并使用 git branch
创建新的引用。
我认为这个答案可能对某人有帮助。 我几乎解决了这个问题。 首先我做的是,就像 Charles Bailey 写的那样,使用
echo ref: refs/heads/master >.git/HEAD
然后我的分支变成了master。我提交了更改并能够切换到我的主分支。问题是我无法使用任何当地分支机构。特别是我想在分支 812 上工作。所以我找到了对分支 812 的最后一次提交(提交时创建消息非常有帮助;))并切换到它。接下来,我根据我切换到的分支创建了 812 分支。不幸的是,一些文件丢失了。幸运的是,我把它们放在了我在“echo”之前复制的损坏的仓库中
对我来说,问题是在 Mac OS X 上设置了“uchg”或“uappnd”标志,无论权限如何,都会锁定一些 git 文件。 我像这样重置了 chflags,它为我解决了这个问题:
sudo chflags -R 0000 .
就我而言,当我尝试
git submodule sync
时,错误发生了。在这种情况下,您需要更新 .git/modules/<submodule_name>/HEAD
文件。