取消

git fetch 失败,因为 unable to resolve reference 'refs/remotes/origin/xxx': reference broken

我在使用 git fetch 命令的时候,发现竟然会失败,提示错误 error: cannot lock ref 'refs/remotes/origin/xxx': unable to resolve reference 'refs/remotes/origin/xxx': reference broken

本文介绍如何修复这样的错误,并探索此错误产生的原因。


错误

在使用 git fetch 命令之后,发现竟然出现了错误,错误输出如下:

1
2
3
4
5
6
7
8
9
10
$ git fetch --all --prune
Fetching origin
error: cannot lock ref 'refs/remotes/origin/next/release': unable to resolve reference 'refs/remotes/origin/next/release': reference broken
From git***.***.com:walterlv/demo-project
 ! [new branch]            next/release        -> origin/next/release  (unable to update local ref)
error: cannot lock ref 'refs/remotes/origin/feature/ai': unable to resolve reference 'refs/remotes/origin/feature/ai': reference broken
 ! [new branch]            feature/ai          -> origin/feature/ai  (unable to update local ref)
error: cannot lock ref 'refs/remotes/origin/release': unable to resolve reference 'refs/remotes/origin/release': reference broken
 ! [new branch]            release             -> origin/release  (unable to update local ref)
error: Could not fetch origin

修复

前往仓库路径,然后删除这些分支对应的文件。

  1. 前往仓库所在的本地文件夹;
  2. 进入子目录 .git\refs\remotes
  3. 一个个对着上面失败的分支,将其删除。

删除错误的分支

比如在我的错误例子中,要删除的文件分别是:

  • .git\refs\remotes\origin\next\release
  • .git\refs\remotes\origin\feature\ai
  • .git\refs\remotes\origin\release

随后,重新尝试 git fetch,git 会重新生成这些分支文件,因此不用担心会删出问题:

1
2
3
4
5
6
$ git fetch --all --prune
Fetching origin
From gitlab.walterlv.com:t/app/demo
   a1fd2551f7..cfb662e870  next/release  -> origin/next/release
 * [new branch]            feature/ai    -> origin/feature/ai
   97d72dfc8f..ceb346c8e2  release       -> origin/release

本文会经常更新,请阅读原文: https://blog.walterlv.com/post/git-fetch-failed-for-reference-broken.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected])

登录 GitHub 账号进行评论