1. 概述
在多人协作开发中,经常会出现一些已经合并到主分支的分支保留在远程仓库中,导致分支列表臃肿、难以维护。本文将介绍如何清理这些已合并的 Git 分支,包括远程和本地分支。
2. 示例准备
我们先创建两个分支:一个已合并,一个未合并,用于后续验证删除命令是否正确执行。
2.1 创建一个未合并的分支
首先创建一个名为 not-merged-branch
的分支,并提交一个空提交:
$ git checkout -b not-merged-branch
$ git commit --allow-empty -m "commit on not merged branch"
$ git push -u origin not-merged-branch
该分支不会被合并到 main
分支中。
2.2 创建并合并一个分支
切换回 main
分支,并创建一个新的分支 fully-merged-branch
:
$ git switch main
$ git checkout -b fully-merged-branch
$ git commit --allow-empty -m "commit on fully merged branch"
$ git push -u origin fully-merged-branch
再次切换回 main
分支,并将 fully-merged-branch
合并进来:
$ git switch main
$ git merge origin/fully-merged-branch
$ git push
这样就完成了分支的创建与合并。
3. 构建删除命令
3.1 列出已合并的远程分支
使用以下命令列出所有已合并到当前分支的远程分支:
$ git branch -r --merged
输出示例:
origin/HEAD -> origin/main
origin/fully-merged-branch
origin/main
说明:
-r
表示只列出远程分支--merged
表示只列出已合并到当前本地分支的远程分支
如果当前不在 main
分支上,也可以指定合并目标:
$ git branch -r --merged main
3.2 排除不删除的分支
通常我们不希望删除 main
或 develop
这类主干分支。使用 grep -v
过滤掉这些分支:
$ git branch -r --merged | grep -v 'main\|develop'
输出示例:
origin/fully-merged-branch
3.3 删除远程分支
清理分支名称前缀 origin/
,然后批量删除:
$ git branch -r --merged | grep -v 'main\|develop' | sed 's/origin\///' | xargs -n 1 git push --delete origin
输出示例:
To [repository address]
- [deleted] fully-merged-branch
✅ 这一步成功删除了远程已合并的分支。
验证远程分支是否还存在:
$ git branch -r
输出示例:
origin/HEAD -> origin/main
origin/develop
origin/main
origin/not-merged-branch
fully-merged-branch
已被删除。
3.4 删除本地已合并的分支
查看本地分支:
$ git branch
输出示例:
develop
fully-merged-branch
* main
not-merged-branch
虽然远程分支已删除,但本地分支仍存在。我们需要手动或自动清理这些分支。
3.4.1 更新本地远程分支引用
先执行 git fetch --prune
清理本地对远程分支的引用:
$ git fetch --prune
3.4.2 删除本地无远程对应的分支
使用以下命令删除本地中远程已删除的分支:
$ git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -n 1 git branch -d
输出示例:
Deleted branch fully-merged-branch (was 401eb4f).
✅ 本地分支也已清理完毕。
验证:
$ git branch
输出示例:
develop
* main
not-merged-branch
3.4.3 仅删除本地已合并分支(不依赖远程)
如果只想删除本地已合并的分支(不依赖远程状态),可以使用:
$ git branch --merged | grep -v 'main\|develop' | xargs -n 1 git branch -d
4. 总结
本文介绍了如何清理 Git 仓库中已合并的分支,包括:
- ✅ 列出已合并的远程分支
- ✅ 过滤掉主干分支(如 main、develop)
- ✅ 删除远程分支
- ✅ 删除本地中远程已删除的分支
- ✅ 单独清理本地已合并分支
通过这些步骤,可以有效保持仓库的整洁,避免分支爆炸带来的维护成本。
附录:常用命令汇总
操作 | 命令 |
---|---|
查看已合并远程分支 | git branch -r --merged |
排除主干分支 | grep -v 'main|develop' |
删除远程分支 | xargs -n 1 git push --delete origin |
删除本地无远程分支 | git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -n 1 git branch -d |
删除本地已合并分支 | git branch --merged | grep -v 'main|develop' | xargs -n 1 git branch -d |
建议集合本文,作为 Git 清理分支的标准操作手册。