GitHub Desktop报fatal: bad ref refs/tags/desktop.ini如何修复
GitHub Desktop持续报bad ref desktop.ini错误修复方案
问题表现
- 运行对应仓库时持续抛出
fatal: git show-ref: bad ref refs/tags/desktop.ini错误,错误弹窗持续堆叠,后台运行时可累积数十个弹窗,存在交互设计缺陷。 - 执行提交、推送操作时触发系列报错:
error: cannot lock ref 'refs/remotes/origin/desktop.ini': unable to resolve reference 'refs/remotes/origin/desktop.ini': reference brokenerror: could not remove reference refs/remotes/origin/desktop.ini- 推送阶段输出
[deleted] (none) -> origin/desktop.ini、fatal: bad object refs/desktop.ini、error: 对应远程仓库 did not send all necessary objects
- 已尝试执行
git fetch、git remote prune origin命令修复,问题未解决。
修复步骤
1. 删除本地损坏的零散引用文件
Git的引用默认以文件形式存储在仓库.git/refs目录下,直接删除所有和desktop.ini相关的损坏引用即可:
在仓库根目录打开Git Bash/终端,执行以下命令:
# 删除标签目录下的损坏引用 rm .git/refs/tags/desktop.ini # 删除远程分支缓存目录下的损坏引用 rm .git/refs/remotes/origin/desktop.ini # 删除根引用目录下的错误desktop.ini引用 rm .git/refs/desktop.ini
Windows系统如果执行命令提示找不到文件,可以直接打开仓库的隐藏.git目录,进入对应路径手动删除存在的desktop.ini文件。
2. 清理打包引用文件里的损坏条目
部分引用会被打包到.git/packed-refs文件中,用文本编辑器打开这个文件,找到所有内容包含desktop.ini的行,整行删除后保存文件。
3. 重置引用并校验仓库完整性
回到终端执行以下命令,完成引用重置和仓库校验:
# 全量校验本地仓库对象完整性 git fsck --full # 强制拉取远程最新引用,覆盖本地错误缓存 git fetch origin --prune --force # 再次清理无效的远程跟踪分支 git remote prune origin
执行完成后在终端测试git show-ref命令,确认没有报错即可。
4. 恢复GitHub Desktop正常运行
完全退出GitHub Desktop进程后重新打开,加载对应仓库就不会再持续弹出错误窗口。如果仍有异常,可以在GitHub Desktop顶部菜单选择「Repository」-「Open in Git Bash」,确认终端下Git操作无报错后重启软件即可。
预防方案
这个问题的根因是Windows系统自动生成的desktop.ini系统配置文件被误识别为Git引用,甚至被误推送到远程仓库导致的。后续可以在仓库.gitignore文件中添加一行desktop.ini,提交时自动忽略该系统文件,避免同类问题复发。
内容的提问来源于stack exchange,提问作者ChungaBunga
相关产品推荐
相关产品推荐

