我在泄露的 CIA 开发者文档中发现了一个有用的 Git one liner
Source: Hacker News
在 2017 年,维基泄密(WikiLeaks)公布了 Vault 7——一大批 CIA 的黑客工具和内部文档。在这些利用漏洞的工具和监控工具之中,埋藏着一页相当平凡的内容:内部开发者文档,里面有 Git 的技巧与窍门 link。
大部分内容都是相当常规的——修改提交、暂存更改、使用 bisect。但有一个技巧从此一直保存在我的 ~/.zshrc 中。
问题
随着时间的推移,本地 Git 仓库会累积大量陈旧的分支。每一个曾经合并过的功能分支、热修复分支以及实验分支都停留在那里,毫无作用。git branch 看起来就像一个墓地。
你可以使用以下命令列出已合并的分支:
git branch --merged
但逐个删除实在太繁琐。CIA 的开发团队提供了一个更简洁的方案:
原始命令
git branch --merged | grep -v "\*\|master" | xargs -n 1 git branch -d
工作原理
git branch --merged— 列出所有已合并到当前分支的本地分支。grep -v "\*\|master"— 过滤掉当前分支(*)和master,防止误删。xargs -n 1 git branch -d— 逐个安全删除剩余的分支(小写-d不会删除未合并的分支)。
更新后的命令
由于大多数项目现在使用 main 而非 master,你可以对命令进行更新,并排除你经常使用的其他分支:
git branch --merged origin/main | grep -vE "^\s*(\*|main|develop)" | xargs -n 1 git branch -d
在一次部署后从 main 分支运行它,你的分支列表会从几十个条目缩减到寥寥几条。
我把它做成了 Git 别名,这样就不必记住完整语法:
alias ciaclean='git branch --merged origin/main | grep -vE "^\s*(\*|main|develop)" | xargs -n 1 git branch -d'
然后在你的仓库中直接运行:
ciaclean
虽然只是个小技巧,却是那种每周能悄悄省下几分钟、保持仓库整洁的命令。