首页 > 解决方案 > 拉动时出现 Git 致命错误,无法锁定引用,无法解析引用,引用已损坏

问题描述

我意识到这个问题已经被问过好几次了,但不幸的是,旧问题下的解决方案都无法解决我的问题。本质上,我正在尝试从远程存储库中提取数据,并且每次都会收到错误消息:

error: cannot lock ref 'refs/remotes/origin/photonic_link': unable to resolve reference 'refs/remotes/origin/photonic_link': reference broken
From https://gitlab.com/GXC_Dev/genxcomm-python-library
 ! [new branch]      photonic_link -> origin/photonic_link  (unable to update local ref)

现在,如果解决问题很重要,我不得不在一周前将我的分支从 master 切换到 photonic_link,因为我拉错了分支(master),却没有意识到我应该在另一个分支上工作。这也是我切换分支后第一次尝试从存储库中提取。

正如我之前提到的,我已经尝试了其他答案中的解决方案,但没有一个对我有用。我试过git gc --prune=nowand git gc,但我对这两个命令都得到了以下响应:

error: bad ref for .git/logs/HEAD
error: bad ref for .git/logs/refs/heads/photonic_link
error: bad ref for .git/logs/refs/remotes/origin/photonic_link
fatal: bad object refs/heads/photonic_link
fatal: failed to run repack

然后我尝试git rm -rf .git/logs/refs/remotes/origin/photonic_link了,我收到了一个致命错误:

fatal: pathspec '.git/logs/refs/remotes/origin/photonic_link' did not match any files

git rm -rf .git/refs/remotes/origin/photonic_link返回与上述类似的“不匹配任何文件”错误。

运行git fetch返回以下内容:

remote: Enumerating objects: 215, done.
remote: Counting objects: 100% (215/215), done.
remote: Compressing objects: 100% (136/136), done.
remote: Total 215 (delta 119), reused 144 (delta 75)
Receiving objects: 100% (215/215), 69.08 KiB | 115.00 KiB/s, done.
Resolving deltas: 100% (119/119), completed with 8 local objects.
From https://gitlab.com/GXC_Dev/genxcomm-python-library
   98878cb..cef33e7  RF_Link_Modeling -> origin/RF_Link_Modeling
   256b31e..9b09944  bell_dev         -> origin/bell_dev
   9c5603e..6209abc  master           -> origin/master
error: cannot lock ref 'refs/remotes/origin/photonic_link': unable to resolve reference 'refs/remotes/origin/photonic_link': reference broken
 ! [new branch]      photonic_link    -> origin/photonic_link  (unable to update local ref)

我尝试的最后一件事是进入并从我的 .git/packed-refs 文件中手动删除包含 photonic_link 的行,但它在那里不存在。有谁知道我该如何解决这个问题?

标签: gitgitlabrefpull

解决方案


这发生在我身上,因为我正在开发的 VM 崩溃并使其文件系统处于某种不一致的状态。

对我有什么帮助:

  1. 检查出了什么问题git for-each-ref。这将列出损坏的引用,它们看起来像warning: ignoring broken ref refs/remotes/origin/HEAD.
  2. 删除保存远程引用的 Git 目录:rm -rf .git/refs/remotes/origin. 它不像看起来那么危险,因为您只在本地删除并且仍然保持远程存储库完好无损。
  3. 告诉 Git 再次匹配本地和远程分支:git branch --set-upstream-to=origin/master master
  4. 现在git pull应该可以了。

推荐阅读