如何批量删除已合并的 Git 分支

删除已合并的本地分支:git branch --merged | grep -v 排除保护分支 | xargs git branch -d。远程已合并分支用 git branch -r --merged 找出后逐个 git push origin --delete。删除前确认已合入正确的目标分支。

最佳实践
Git 分支协作与合并示意

先切到主分支,然后一条组合命令:git branch --merged | grep -v '\*\|main\|develop' | xargs git branch -d。它列出已合入当前分支的所有分支,排除当前分支和主分支后逐个安全删除(-d 只会删已合并的,删不掉会拒绝)。

清理本地分支

git checkout main
git pull                            # 确保 main 最新

git branch --merged | grep -vE '^\*|main$|master$|develop$' | xargs git branch -d
  • git branch --merged:列出已合并进当前分支的本地分支;
  • grep -vE:排除当前分支(* 开头)和保护分支;
  • git branch -d:安全删除(未合并的会被拒绝,不会误删)。

清理远程分支

git fetch --prune                   # 先清掉远程已删的引用

# 列出已合并的远程分支(排除保护分支)
git branch -r --merged | grep -vE 'main|master|develop|HEAD'

# 逐个删除(确认后再执行)
git push origin --delete feature/old-1

GitHub 上合并 PR 时勾选 "Delete branch",或仓库设置开启自动删除,可以从源头减少堆积。

常见问题(FAQ)

Q:--merged 判断的基准是什么?

相对于当前所在分支。在 main 上执行就是"已合入 main"。分支若只合入了 develop 没合入 main,在 main 上跑时不会被列出。

Q:删除分支会删提交吗?

不会。已合并的提交都在 main 的历史里,删分支只是删一个指针。未合并分支被 -D 强删才有丢提交的风险。

Q:有没有交互式逐条确认的方式?

xargs -p git branch -d(每条执行前询问 y/n),或者去掉 xargs 先看列表手工挑。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台