branch-cleanerlisted
Install: claude install-skill YuAICode/ai-skills
# branch-cleaner — 本地分支清理候选列表
扫描本地 git 分支,找出已合并进默认分支或长期无提交的"可清理"候选,展示给用户确认后再执行删除——脚本本身只读,绝不删分支。
## 何时触发
用户说"清理分支 / 哪些分支可以删 / 列出过期分支 / 整理 git 分支 / 哪些分支可以清掉"。
## 用法
### 1. 列出候选分支(确定性脚本)
```bash
bash <skill>/bin/list-branches.sh [额外保护分支...] [陈旧天数]
# 缺省:保护 main master + 当前分支,陈旧判定 60 天
# 例:bash <skill>/bin/list-branches.sh develop release 30
```
输出两组:
- `MERGED:` — 已合并进默认分支(main/master)的本地分支,带最后提交日期。
- `STALE:` — 最后提交早于 N 天的本地分支,带最后提交日期。
**保护分支(绝不出现在候选列表):** `main` / `master` / 当前所在分支 / 用户传入的额外保护分支。
### 2. Claude 展示候选并征得用户同意
- 把两组候选逐条/批量展示给用户。
- **必须明确得到用户同意**后才执行删除,不能假设用户自动同意。
- 对每个候选分支说明它为何可删(已合并 / 陈旧多少天)。
### 3. 用户确认后执行删除
```bash
# 已合并分支(安全删):
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、不推送、不改配置。