【问题标题】:Git cannot lock ref 'HEAD': unable to resolve reference HEADGit 无法锁定 ref 'HEAD':无法解析引用 HEAD
【发布时间】:2016-12-27 17:33:34
【问题描述】:

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

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 我跑了。你能检查我的编辑吗?
  • 现在试试git fsck --full。也可以通过stackoverflow.com/a/20264177/1190388
  • 可能是您丢失了 HEAD。使用echo ref: refs/heads/master >.git/HEAD 重新创建它
  • 或使用 git symbolic-ref HEAD refs/heads/master 获取更新版本的 github

标签: git github bitbucket sourcetree


【解决方案1】:

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

.git/refs/heads/branch_name 

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

git reset

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

【讨论】:

  • 只删除.git/refs/heads/branch_name解决了我的问题,非常感谢
  • 我也是,这也解决了我的问题,去命令并删除这个分支文件
  • 如何在保留所有旧提交的同时解决?它删除了所有旧的提交。
【解决方案2】:

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

第 1 步。

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

第 2 步。

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

【讨论】:

  • 这几乎奏效了。我不得不为 refs\remote\origin\YOUR_BRANC 做类似的事情,该文件也充满了垃圾。澄清一下:日志文件,即 (.git\logs\refs\head\master) 包含您提交的参考编号。在您的 .git\refs\heads\master 中,您放置了最后一个 to-id。然后在你的 .git\refs\remote\master 你放一个旧的数字(取决于你上次同步的时间)然后你可以在这些数字之间同步任何提交。
  • 这正是我所需要的。我的文件在停电开始时准确推送后损坏,所有其他解决方案都让我删除了我的本地更改。小说明:logs\refs\heads 下有一个包含许多提交 id 的历史日志,请确保为您需要的提交选择 id!
  • 哇!这应该是公认的答案!就我而言,正如你所解释的,我有 10 次提交,我将最后一个提交 ID 复制到文件中,它立即在 Visual Studio 中显示了分支名称!
  • 你真的拯救了我的一天,感谢您提供优质的解决方案。我认为这是整个答案列表中唯一的解决方案,它提供了恢复损坏分支的选项(由于电源关闭等),而不是像其他人建议的那样删除分支
【解决方案3】:
  1. 导航到目录.git/refs/heads/branch_name

  2. 删除首选分支名称

  3. 打开终端(Windows 的 git bash 或 cmd)

    git 重置

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

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

    git pull
    

    如果给出了拒绝合并无关历史的相关信息,请在终端中运行以下命令:

    git pull origin master --allow-unrelated-histories
    

【讨论】:

  • 谢谢,我不得不删除整个.git 文件夹,重新运行git init 并添加远程,然后git pull--allow-unrelated-histories 标志救了我:)
【解决方案4】:

为我工作,进入终端输入:(根据您的愿望进行分支)

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

【讨论】:

    【解决方案5】:

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

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

    在使用

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

    【讨论】:

    • 对我来说也是权限问题。
    【解决方案6】:

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

    git reset
    

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

        这就是解决我的问题的原因:

        rm -rf .git/refs/heads/
        

        【讨论】:

        • 如果您不知道自己在做什么,那就非常危险了——这会从您的存储库中删除 所有 分支,并可能导致您丢失大量提交(如果您不尽快修复它,稍后将被删除)。
        【解决方案9】:

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

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

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

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

        所以,除此之外,你应该很高兴。您现在也可以提交更改。

        【讨论】:

        • 唯一的权衡是:所有你的上一个。提交将丢失。
        • 但是,文件中的所有更改都会被跟踪,没有问题。只是提交消息将是您在初始化存储库后最初提交的消息,以避开错误,对我来说,没有命令有效,但这个有效。所以,如果你也有麻烦,请按照这个,如果命令不起作用......
        • TL;DR => 删除 .git 文件夹/使用新名称初始化一个 repo,这在你的 Github 中尚不存在
        【解决方案10】:

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

        【讨论】:

          【解决方案11】:
          1. 删除您的.git 文件夹

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

          【讨论】:

          • 您应该警告人们删除 .git 文件夹时会发生什么,不是吗?我的意思是,如果存储库上有很长的历史怎么办?你知道这一切都会丢失,对吧?
          【解决方案12】:

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

          【讨论】:

          • 可以,但git reset 效率更高
          【解决方案13】:

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

          git reset
          

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

          git reset --hard <my_hash_of_last_commit_on_remote_branch>
          

          【讨论】:

            【解决方案14】:

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

            git init
            

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

            【讨论】:

              猜你喜欢
              • 2020-01-16
              • 2020-09-21
              • 1970-01-01
              • 2023-03-18
              • 2022-01-12
              • 2010-12-29
              • 1970-01-01
              • 2019-04-12
              • 2018-06-19
              相关资源
              最近更新 更多