必须显式执行git push origin --delete删除远程分支,因git设计上本地与远程状态分离;删本地分支不影响远端,需推送空引用通知服务端删除,删后须git fetch -p清理本地缓存的远程跟踪引用。

Mac Git删除远程仓库上已被合并的废弃分支,必须显式推送空引用通知远端服务器,不能只删本地跟踪引用;否则GitHub/GitLab页面仍显示该分支,CI可能继续触发构建,且他人pull会失败。
确认目标分支是否已真正合并
先拉取最新远程状态:git fetch origin。
检查某分支(如feature/login)是否所有提交都已进入main:git log origin/main..origin/feature/login。若无输出,说明已完整合并;若有输出,说明仍有未合入提交,【此时不可删】。
注意:不要用git merge-base或IDE标记判断——它们不反映远端实时状态,可能缓存旧信息。
安全列出所有可删的远程分支
方法一(推荐,主干为main):
git branch -r --merged origin/main | grep 'origin/' | sed 's/origin\///' | grep -vE '^(main|develop|master|release/)'。
方法二(主干为develop):
git branch -r --merged origin/develop | grep 'origin/' | sed 's/origin\///' | grep -vE '^(develop|main|master|hotfix/)'。
这一步输出的是纯分支名列表,不含origin/前缀,方便后续管道处理;【务必排除保护分支和集成分支】,否则批量执行时可能触发远端拒绝错误。
批量删除远程分支
第一步:执行删除命令
git branch -r --merged origin/main | grep 'origin/' | sed 's/origin\///' | grep -vE '^(main|develop|master)$' | xargs -I {} git push origin --delete {}。
第二步:清理本地失效的远程跟踪引用
git fetch -p。
macOS默认shell为zsh,xargs -I {}完全兼容;如果使用fish或bash,语法一致无需调整。删完立刻运行git branch -r验证——origin/xxx类引用应全部消失,只剩仍在远端存在的分支。
警告:git push origin :branch-name是旧语法,冒号易打错、语义模糊,2026年所有主流Git版本均支持--delete,必须用它。











