Git 无法锁定引用 'HEAD': 无法解析引用 HEAD

Git cannot lock ref 'HEAD': unable to resolve reference HEAD

我正在尝试将更改提交到我的存储库,但我收到以下错误:

git -c diff.mnemonicprefix=false -c core.quotepath=false commit -q -F C:\Users\Contronym\AppData\Local\Temp\bkdweixb.mnu
fatal: cannot lock ref 'HEAD': unable to resolve reference HEAD: Invalid argument

Completed with errors, see above.

我正在使用 bitbucket 和 SourceTree。

这次提交失败的原因是什么?在过去的一周里,我能够很好地提交最后 3 次提交。然后,突然之间,我收到了这个错误。

编辑

I 运行 git gc 结果如下:

$ git gc
error: bad ref for HEAD
error: bad ref for HEAD
error: inflate: data stream error (unknown compression method)
fatal: loose object 53b65bd9b4fec7f6a7b0b3313c68199a18804327 (stored in .git/objects/53/b65bd9b4fec7f6a7b0b3313c68199a18804327) is corrupt
error: failed to run repack

我检查了目录 .git/objects/53/b65bd9b4fec7f6a7b0b3313c68199a18804327 但它不存在。那里还有另外两个文件,但 b65bd9b4fec7f6a7b0b3313c68199a18804327 不存在。

我也遇到了同样的问题。我刚刚使用了命令:

git reset

比我删除文件/my_project_directory/./git/refs/heads/master 然后我可以使用这个命令:

git reset --hard <my_hash_of_last_commit_on_remote_branch>

为我工作,进入终端输入:(根据您的需求分支 lul)

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

我遇到了同样的问题,我找到的唯一解决方案是像这样导航到头部:

.git/refs/heads/branch_name 

并且我删除了头文件。然后我去了控制台,我使用了命令:

git reset

然后所有文件都未暂存,因此添加它们并在之后提交它们。

在使用工作副本中的 root 用户调用 git 命令后,我遇到了同样的问题。所以.git/下各种文件的属主和属主组都改为"root"。

当我切换回我的用户帐户时,由于缺少权限,git 无法再处理这些文件。

使用

重置权限后,它再次工作
sudo chown -R [MY_USER]:[MY_GROUP] .git

我遇到了同样的问题,这对我有用:

步骤 1.

  • 转到 .git\logs\refs\heads 并打开名为 YOUR_BRANCH 的文档,现在复制您的用户名和电子邮件前面的 ID 数字

第 2 步

  • 转到 .git\refs\heads 并打开名为 YOUR_BRANCH 的文档,删除该行并将 ID 粘贴到

当我 运行 进入这个项目时,我只是 git 将项目克隆到一个新的文件目录中,然后从 .git\refs\heads 中拉出 heads 文件夹并替换原来的 heads 文件您遇到问题的目录。然后只需删除您创建的新克隆(因为它显然没有您尝试推送的更新)。

如果您不介意丢失您的历史记录,您可以删除.git文件然后:

git init

这将重新初始化您的存储库,然后您可以从那里继续。

这就是解决我的问题的方法:

rm -rf .git/refs/heads/
  1. 导航到目录 .git/refs/heads/branch_name

  2. 删除首选分支名称

  3. 打开终端(git bash or cmd for windows)

    git 重置

  4. 提交更改(如有必要)

  5. 运行合并远程仓库分支的命令如下

    git pull
    

    如果给出相关拒绝合并不相关历史,运行在终端中输入以下命令:

    git pull origin master --allow-unrelated-histories
    

我遇到了这个问题,我使用了这个命令:

git reset

删除文件.git/ORIG_HEAD然后再次拉取。对我来说,.git/ORIG_HEAD 文件是 0 字节并且具有 .lock 扩展名而不是它应该包含的 git 引用,所以我只是摆脱了它。

我今天遇到了同样的问题。 我找到了解决此问题的非常简单的解决方法,但需要权衡取舍。 我仍然不确定最初是什么原因造成的。 我遇到了很多解决方案,不幸的是,没有一个对我有用。

我无法在此错误期间初始化 GitHub 存储库,这实际上帮助我找到了解决方案。 显然,只需删除 .git 目录即可解决很多问题。就在我删除该目录时,我能够初始化一个回购协议。 您将在工作区中找到 .git 文件夹。 .git(目录)/配置(文件)。配置文件可能已损坏,可能是问题的根源。 (我不确定原因,任何外行的解释将不胜感激)

当我删除文件夹时,所有错误都消失了。我还能够从 GitHub 桌面提交(这会抛出错误,之前,直接从 IDE 提交时也会出现同样的错误)

唯一的缺点是,您所有的阶段性更改可能会丢失,仅此而已。而且您可能必须初始化一个新的回购协议,因为提供相同的名称会引发错误(如果相同的回购协议已经存在)

因此,除此之外,您应该可以开始了。您现在也可以提交更改。

再次克隆项目,安装模块并签出到您的分支。它将恢复状态。

  1. 删除您的 .git 文件夹

git init
git remote add origin url
git commit -m 'msg'
git push origin dev