clean-brancheslisted
Install: claude install-skill toRolex/rolex-skills
# Clean Branches
清理已合入的 Git 分支,联动删除本地和远程。
## 核心流程
### 1. 收集状态
并行执行以下命令:
```bash
# 当前分支 + 本地全部分支 + 跟踪关系
git branch -vv
# worktree 列表(防止误删正在使用的分支)
wt list 2>/dev/null || git worktree list
# 所有远程分支
git branch -r
# 已合并入当前分支的本地分支(排除当前分支和 main/master)
git branch --merged | sed 's/^\* //' | grep -vE '^(main|master|develop|HEAD)$' | grep -v "^$(git rev-parse --abbrev-ref HEAD)$"
# 检测 squash merge(GitHub squash merge 无 merge commit,--merged 不识别)
# 两类检测方法:
# a) release/* 分支:匹配对应 tag 是否存在(release 分支的 version bump 使 three-dot diff 永远非空)
# 如 release/<version> -> 查 v<version> tag
# b) 其他分支:three-dot diff 为空 -> 分支内容已合入
git branch | sed 's/^\* //' | grep -vE '^(main|master|develop|HEAD)$' | grep -v "^$(git rev-parse --abbrev-ref HEAD)$" | while read -r b; do
b="${b# }" # 去掉可能的前导空格
git merge-base --is-ancestor "$b" HEAD 2>/dev/null && continue
# release/* 分支用 tag 检测
if echo "$b" | grep -qE '^release/'; then
ver=$(echo "$b" | sed 's/^release\///')
if git tag -l "v$ver" | grep -q .; then
echo "$b [squash-merged] (tag v$ver exists)"
continue
fi
fi
# 非 release 分支用 three-dot diff
git diff --quiet HEAD..."$b" 2>/dev/null && echo "$b [squash-merged]"
done
# 已合并入当前分支的远程 tracking branches(如有 origin)
git branch -r --merged origin/HEAD 2>/dev/null | sed 's/^\* //' | grep -vE '^(origin/HEAD|origin/main|origin/master)$'
# 检测远程 squash merge 的分支
git branch -r | sed 's/^\* //' | grep -vE '^(origin/HEAD|origin/main|origin/master)$' | while read -r