提交时无法设置 refs/heads/master

Couldn't set refs/heads/master when commit

我昨天能够很好地提交。但是今天(我没有改变任何东西),当我提交时:

$ 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,则将内容写入文件,而不是其对象名称。

检查您的 .git 文件夹中的文件 HEAD。

$ cat .git/HEAD
ref: refs/heads/master

如果不存在,请创建它。

$ echo "ref: refs/Heads/master" > .git/HEAD

这可能对其他人有帮助;我等了大约一分钟,然后简单地重试了提交,然后……成功了。

在我的例子中,问题是 对服务器 上的 GIT 存储库的权限 refs/Heads/master

After allowing my username for accessing the mentioned path, all worked well.

当我有 2 个 VS Code 副本时,我遇到了这个问题 (fatal: couldn't set 'refs/heads/my-branch'),每个副本都有集成终端检出到同一个提交。除了一个版本的 VS Code 处于 WSL(Windows 子系统 Linux)模式。我关闭了 WSL VS Code,并立即能够在香草 non-WSL VS Code 中提交。

对我来说,需要 Windows 重启才能让它再次工作:-)))

就我而言,在我的 .git 文件夹中,有文件 HEAD,它无法将 HEAD.lock 重命名为 HEAD(即使它没有不要告诉我)。我删除了 HEAD 文件,它可以正常工作。

(我也用过 TortoiseGit,不知道有没有关系)