Azure DevOps流水线及本地Git出现__pycache__远程引用损坏问题求助
解决Git远程引用损坏(含__pycache__路径)的问题
问题重现
Azure DevOps流水线突然停止工作,排查发现远程仓库存在一个异常的损坏引用:.git/refs/remotes/origin/feature/__pycache__/app.cpython-310.pyc——这个引用本不应存在。登录服务器删除__pycache__目录后流水线恢复,但本地执行git fetch --all --prune时触发相同错误:
$ git fetch --all --prune Fetching origin error: cannot lock ref 'refs/remotes/origin/feature/__pycache__/app.cpython-310.pyc': unable to resolve reference 'refs/remotes/origin/feature/__pycache__/app.cpython-310.pyc': reference broken error: could not remove reference refs/remotes/origin/feature/__pycache__/app.cpython-310.pyc
本地修复步骤
要解决本地的错误,直接清理本地的损坏引用即可:
- 方法一:手动删除损坏的引用目录
进入本地仓库的对应路径,直接移除__pycache__相关的引用目录:rm -rf .git/refs/remotes/origin/feature/__pycache__ - 方法二:用Git命令移除指定损坏引用
针对具体的损坏引用执行删除命令:git update-ref -d refs/remotes/origin/feature/__pycache__/app.cpython-310.pyc
执行完上述任一操作后,再重新运行git fetch --all --prune即可正常完成同步。
成因分析
- 最直接的原因就是误操作创建并推送了包含
__pycache__路径的分支,比如执行了类似git checkout -b feature/__pycache__/app.cpython-310.pyc的命令,然后将这个异常分支推送到了Azure DevOps远程仓库。Git允许分支名包含斜杠,但__pycache__是Python自动生成的缓存目录,完全不属于合法分支名的范畴。 - 少数情况下,也可能是自动化脚本、CI/CD工具或Git客户端插件的bug,导致误将
__pycache__下的缓存文件路径识别为分支名并推送,但这种场景概率极低。 - 远程仓库的异常引用同步到本地后,Git在fetch时无法解析这个不符合规范的引用结构,就会抛出“reference broken”的错误。
内容的提问来源于stack exchange,提问作者Shaun Mitchell
相关产品推荐
相关产品推荐

