如何撤销Git远程仓库的意外镜像状态?
解决远程仓库被误设为镜像状态的问题
问题根源
误执行git push --mirror或git push *:*会将本地所有引用(包括refs/remotes/下的远程追踪分支)推送到远程仓库,导致远程仓库中出现了本不该存在的refs/remotes/开头的分支,Git拉取时会混淆分支追踪关系,从而触发警告。
修复步骤
1. 清理远程仓库的无效引用
以主仓库gh为例,其他远程仓库(bb、sf)需重复此操作:
先确认远程仓库的多余引用:
git ls-remote gh输出中会看到
refs/heads/(正常分支)和refs/remotes/(误推送的无效分支)两类引用。批量删除远程的
refs/remotes/类引用:git ls-remote gh | grep 'refs/remotes/' | awk '{print ":"$2}' | git push gh --stdin该命令会自动过滤出远程的无效引用,并格式化为Git删除远程引用的格式(
:<引用路径>),批量推送到远程完成删除。
2. 修复本地分支的追踪关系(可选)
如果本地分支的追踪配置出现异常,可重新设置:
- 查看当前分支的追踪状态:
git branch -vv - 重新设置本地分支与远程分支的追踪关系,例如:
# 设置master分支追踪gh/master git branch --set-upstream-to=gh/master master # 设置old-master分支追踪gh/old-master git branch --set-upstream-to=gh/old-master old-master
3. 后续推送规范
避免再使用--mirror或*:*这类会推送所有引用的命令,仅推送本地分支到对应远程分支:
# 推送指定分支到远程 git push gh master old-master # 或如果分支已正确追踪,直接推送当前分支 git push gh
内容的提问来源于stack exchange,提问作者Andry
相关产品推荐
相关产品推荐

