Git无法锁定引用“HEAD”:无法解析引用头。

66

我正在尝试提交更改到我的代码库,但是收到下面的错误:

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个版本。突然间,我收到了这个错误提示。

编辑

我运行了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不存在。


@hjpotter92 我运行了它。你可以检查我的编辑吗? - Jake Miller
现在尝试使用 git fsck --full 命令。还可以参考 https://dev59.com/smIj5IYBdhLWcg3wcEqI#20264177。 - hjpotter92
1
也许你丢失了 HEAD。使用 echo ref: refs/heads/master >.git/HEAD 重新创建它。 - Rohan Khude
1
或者使用 git symbolic-ref HEAD refs/heads/master 获取 GitHub 的更新版本。 - Rohan Khude
20个回答

63

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

.git/refs/heads/branch_name 

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

And I deleted the head file. Then I went to the console and I used the command:

git reset

然后所有的文件都被取消暂存,所以将它们添加并在之后提交。


17
只有删除.git/refs/heads/branch_name才解决了我的问题,非常感谢。 - Kushal
这对我来说是有效的。但现在的问题是,它将会断开与远程仓库的连接链。因此,尝试推送到远程仓库时可能会遇到另一个错误,不过这也可以进行配置。 - PRONO

20

我曾经遇到同样的问题,以下方法对我有效:

步骤1。

  • 进入.git\logs\refs\heads并打开名称为YOUR_BRANCH的文档,现在复制您用户名和电子邮件前面的ID号码

步骤2。

  • 进入.git\refs\heads并打开名称为YOUR_BRANCH的文档,删除该行并粘贴ID

12
  1. 进入目录.git/refs/heads/branch_name

  2. 删除所选分支名称

  3. 打开终端(Windows系统下为git bash或cmd)

git reset
  • 提交更改(如果需要)

  • 运行以下命令以合并远程代码库分支

  • git pull
    

    如果出现关于拒绝合并不相关历史记录的问题,请在终端中运行以下命令:


    git pull origin master --allow-unrelated-histories
    git pull origin master --allow-unrelated-histories
    

    6
    在终端中输入以下命令,适配您的分支需求(笑): 该方法对我有用。
    echo ref: refs/heads/master >.git/HEAD
    

    4

    在工作副本中使用root用户调用git命令后,我遇到了同样的问题。因此,.git/下各个文件的所有者和所有者组被更改为“root”。

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

    重置权限后,它又可以正常工作了,方法如下:

    sudo chown -R [MY_USER]:[MY_GROUP] .git
    

    2

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

    git reset
    

    1
    当我遇到这个问题时,我只需将项目 git clone 到一个新的文件目录,并从位于 .git\refs\heads 的 heads 文件夹中拉取并替换在你遇到问题的目录中的原始 heads 文件。然后只需删除你创建的新克隆体(因为它显然没有你试图推送的更新)。

    1

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


    1

    你想要一个快速、100%可行的解决方案吗?

    我尝试了这里建议的一些方法(谢谢大家!),但对我来说都没有解决问题。

    1. 将你的目录重命名为_old。

    2.再次克隆你的项目,放到一个全新的目录中。

    然后,逐个移动你的文件/恢复你的工作。

    这是保证可行的!即使在开始时玩弄git命令看起来更有趣。:)

    注意:在"git clone"命令和你的文件之间的时空只会影响你的文件,所以如果你处于多次提交但未推送的情况下,请注意:提交列表(和逻辑)将会丢失。


    这也是我所做的。 - Andrew

    1

    检查分支名称
    git show-ref --head

    首先,只需检查错误,您将找到哪个引用已损坏

    步骤1:只需删除此提到的引用
    rm .git/refs/heads/branch_name

    步骤2:git fetch
    步骤3:git pull

    一定会成功....


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接