← ClaudeAtlas

clean-brancheslisted

清理本地和远程已合并的 Git 分支。扫描所有本地分支和远程 tracking branches,标记已合并入当前分支的分支,一次性列表让用户勾选确认后删除并验证结果。使用场景包括:分支太多要清理、合并后残留、worktree 未清理、远程 stale branches。当用户提到 清理分支/删分支/整理分支/clean branches/branch cleanup/prune branches/git clean 时务必使用。对于合并后残留的发布分支、废弃的功能分支、已修复的 bugfix 分支尤其适用。
toRolex/rolex-skills · ★ 0 · Code & Development · score 72
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