我在使用 git fetch
命令的时候,发现竟然会失败,提示错误 error: cannot lock ref 'refs/remotes/origin/xxx': unable to resolve reference 'refs/remotes/origin/xxx': reference broken
。
本文介绍如何修复这样的错误,并探索此错误产生的原因。
错误
在使用 git fetch
命令之后,发现竟然出现了错误,错误输出如下:
$ 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
修复
前往仓库路径,然后删除这些分支对应的文件。
- 前往仓库所在的本地文件夹;
- 进入子目录
.gitrefsremotes
; - 一个个对着上面失败的分支,将其删除。
比如在我的错误例子中,要删除的文件分别是:
.gitrefsremotesoriginnextrelease
.gitrefsremotesoriginfeatureai
.gitrefsremotesoriginrelease
随后,重新尝试 git fetch
,git 会重新生成这些分支文件,因此不用担心会删出问题:
$ 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]) 。