如何批量删除已合并的 Git 分支
删除已合并的本地分支:git branch --merged | grep -v 排除保护分支 | xargs git branch -d。远程已合并分支用 git branch -r --merged 找出后逐个 git push origin --delete。删除前确认已合入正确的目标分支。
先切到主分支,然后一条组合命令: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 先看列表手工挑。