| name | branch-cleaner |
| description | 列出可清理的本地分支(已合并 / 陈旧),供用户确认后再删。当用户说"清理分支 / 哪些分支可以删 / 列出过期分支 / 整理 git 分支 / 哪些分支可以清掉"时触发。 |
branch-cleaner — 本地分支清理候选列表
扫描本地 git 分支,找出已合并进默认分支或长期无提交的"可清理"候选,展示给用户确认后再执行删除——脚本本身只读,绝不删分支。
何时触发
用户说"清理分支 / 哪些分支可以删 / 列出过期分支 / 整理 git 分支 / 哪些分支可以清掉"。
用法
1. 列出候选分支(确定性脚本)
bash <skill>/bin/list-branches.sh [额外保护分支...] [陈旧天数]
输出两组:
MERGED: — 已合并进默认分支(main/master)的本地分支,带最后提交日期。
STALE: — 最后提交早于 N 天的本地分支,带最后提交日期。
保护分支(绝不出现在候选列表): main / master / 当前所在分支 / 用户传入的额外保护分支。
2. Claude 展示候选并征得用户同意
- 把两组候选逐条/批量展示给用户。
- 必须明确得到用户同意后才执行删除,不能假设用户自动同意。
- 对每个候选分支说明它为何可删(已合并 / 陈旧多少天)。
3. 用户确认后执行删除
git branch -d <分支名>
git branch -D <分支名>
MERGED 组的分支用 git branch -d(git 会再次验证已合并)。
- 仅出现在
STALE 组、未出现在 MERGED 组的分支属于"未合并但陈旧",强删 (-D) 前须向用户再次显式确认,说明该分支未合并进默认分支。
4. 删后确认
跑一次 git branch 让用户确认分支已消失。
硬规则
- 脚本只读:只用
git branch --merged、git for-each-ref、git branch(列表)等只读命令,绝不执行任何删除。
- 保护分支与当前分支绝不动:无论用户怎么说,
main、master、当前所在分支 永远不出现在候选列表里。
- 删前确认:
MERGED 组每次删前确认;STALE 未合并组须额外再次确认,并说明风险。
- 不联网、不改任何远程资源:只操作本地分支。
边界
- 只扫本地分支,不扫远程分支(remote-tracking refs)。
STALE 判定基于 committerdate(最后提交时间),与远程推送时间无关。
- 若仓库没有
main 也没有 master,MERGED: 组可能为空(输出会注明)。
- 不打 tag、不推送、不改配置。