单个删除
- 首先查看所有本地分支的信息:
git branch -vv
这会列出每个本地分支,以及它们跟踪的远端分支。
- 然后使用grep过滤出没有跟踪远端分支的本地分支:
git fetch -p
git branch -vv | grep 'origin/.*: gone]'
- 最后删除这些本地分支:
git branch -d <branch-name>
比如:
git branch -d local-branch
这样就可以批量删除那些没有跟踪任何远端分支的本地分支了。另外,如果本地分支曾跟踪一个已经被删除的远端分支,也可以使用上述方法将其删除。使用这种方式可以定期清理本地无用的分支,保持仓库的整洁
批量删除
对于这个需求,我们可以通过 bash 的循环语句来实现批量删除:
git branch -vv | grep 'origin/.*: gone]' | awk '{print $1}' | xargs git branch -D
解析:
git branch -vv 列出所有分支详情
grep 过滤出 gone 的结果
awk 打印出第1列,也就是分支名
xargs 将分支名作为参数传给 git branch -D 命令这样就可以自动遍历所有无效分支并批量删除了。
或者也可以用一个简单的 for 循环:
for branch in $(git branch -vv | grep 'origin/.*: gone]' | awk '{print $1}'); do
git branch -D $branch
done
效果是一样的。需要注意的是,这会无差别删除所有无远程关联的本地分支,请按需求谨慎操作。