git branch --merged 列出已完全合并进当前分支的本地分支,可安全删除但需确认是否已推送到远程、业务是否上线,并配合 git push origin --delete 删除远程分支。

git branch --merged 看哪些分支能安全删
直接运行 git branch --merged,它列出所有**已完全合并进当前所在分支**的本地分支(不含当前分支本身)。这是判断“能否删”的第一道过滤器——但注意,它只看 commit DAG 的可达性,不保证业务逻辑已上线或测试通过。
常见误判点:
- 如果当前在
main,git branch --merged显示feature/login,不代表它已在生产环境验证过,可能只合入了测试分支 -
develop分支若长期存在,会把大量旧功能分支标记为 “merged”,实际这些分支可能早该清理 - 它不检查远程分支状态,
origin/feature/x即使本地已删,仍可能残留远程
删本地分支前先确认是否还有未 push 的提交
有些分支看似 merged,但最后几个 commit 没 push 到远程,直接删会丢代码。用 git log <branch-name> --not origin/<branch-name></branch-name></branch-name> 检查:
git log feature/pay-v2 --not origin/feature/pay-v2
如果有输出,说明本地有未同步到远程的提交,不能删;没输出才表示远程和本地一致。
更稳妥的做法是:先 git checkout <branch-name></branch-name>,再 git status,看是否提示 “Your branch is up to date with 'origin/
批量删多个本地分支的命令要加 -d 不是 -D
git branch -d 是安全删除,只允许删已 merge 的分支;git branch -D 强制删,跳过检查——这容易误删还在用的分支,比如临时调试分支还没合入。
推荐一次性清理多个:
将公开的创作者、博主、播客主持人、YouTuber 或 X/Twitter 账号人物转化为可部署的 OpenClaw 代理。当用户提供 YouTube 链接、X(推特)链接等时使用。
git branch --merged | grep -v "main\|develop" | xargs git branch -d
说明:
-
grep -v "main\|develop"排除保护分支(注意 shell 中 \| 需转义) - 如果某分支删失败(比如未 merge),
git branch -d会报错并停止,不会连带删掉后面的分支 - 别用
git branch -d $(git branch --merged)—— 当前分支名也会被包含进去,导致报错 “Cannot delete branch ‘main’ checked out”
删完本地还要手动删远程分支
本地删完,远程分支还挂着,下次 git fetch 又会拉下来。删远程用:
git push origin --delete feature/old-report
或者简写:
git push origin :feature/old-report
注意冒号前有空格,这是 git 的“推送空引用”语法。批量删远程分支需配合 git branch -r --merged(查已合并的远程跟踪分支),但要注意:--merged 在远程分支上默认以 origin/main 为基准,不是你当前本地分支——容易漏删或错删。
最保险的方式是先人工确认哪些远程分支确实没人用了,再逐条删,尤其留意 CI/CD 流水线是否还引用着某个 origin/hotfix/* 分支。
删远程后,建议跑一次 git remote prune origin,清理本地对已删远程分支的引用记录,否则 git branch -a 还会显示灰色的 remotes/origin/xxx。










