我昨天表现得很好。但今天(我没有改变任何东西),当我承诺时:
$ git add config.h
$ git commit -m "Update config.h to reset the values"
error: Couldn't set refs/heads/master
fatal: cannot update HEAD ref
我知道这个错误也可能在拉或推期间发生。但我在提交时还没有找到修复它的解决方案。
我的 .git/config 文件如下所示:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
[remote "origin"]
url = git@SOME_URL
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
您似乎丢失了
HEAD
,因此您必须重新创建它。你可以用这个来做到这一点。
echo ref: refs/heads/master >.git/HEAD
这将在您的 .git 文件夹中创建一个
HEAD
文件。这应该可以解决你的问题。
另外,请尝试使用
git fsck
命令。它验证数据库中对象的连接性和有效性。
git fsck --lost-found
用它来扫描无法到达的对象。它将根据类型将悬挂对象写入
.git/lost-found/commit/
或 .git/lost-found/other/
。如果对象是 blob,则内容将写入文件,而不是其对象名称。
当我有 2 个 VS Code 副本时,我遇到了这个问题 (
fatal: couldn't set 'refs/heads/my-branch'
),每个副本都有集成终端签出到相同的提交。除了 VS Code 的一个版本处于 WSL(适用于 Linux 的 Windows 子系统)模式之外。我关闭了 WSL VS Code,并立即能够在普通的非 WSL VS Code 中提交。
这可能对其他人有帮助;我等了大约一分钟,只是重试了提交,然后……它成功了。
就我而言,问题在于路径refs/Heads/master
的服务器上GIT存储库的权限。
允许我的用户名访问上述路径后,一切正常。
$ cat .git/HEAD
ref: refs/heads/master
如果不存在,请创建它。
$ echo "ref: refs/Heads/master" > .git/HEAD
.git
文件夹中,有文件
HEAD
,并且它无法将HEAD.lock
重命名为HEAD
(即使它没有告诉我)。我删除了 HEAD
文件,它能够正常工作。(我也在使用TortoiseGit;不知道这是否有什么关系)