用途
该技能用于清理本地分支:当某个本地分支的远程跟踪分支已经被删除时,将其从本地删除,并同时处理该分支关联的 worktree。适用于用户提出“clean up branches”“delete gone branches”“prune local branches”等请求的场景。
主要能力
- 先执行 git fetch --prune 获取最新远程状态,再解析 git branch -vv,识别被标记为 : gone] 的分支。
- 若发现脚本输出 NONE,则报告未找到过期分支并停止。
- 在删除前向用户展示待删除分支列表并请求确认。
- 删除分支前检查其是否关联 worktree;若存在且不是主仓库根目录,则先移除该 worktree,再删除分支。
- 删除过程中逐步报告结果,最后汇总清理数量。
使用方式
第一步:发现已消失的分支。运行发现脚本:
bash scripts/clean-gone
该脚本先运行 git fetch --prune,然后解析 git branch -vv 中标记为 : gone] 的分支。若脚本输出 NONE,报告没有过期分支并停止。
第二步:展示分支并请求确认。以简单列表形式展示将被删除的分支,例如:
These local branches have been deleted from the remote:
- feature/old-thing
- bugfix/resolved-issue
- experiment/abandoned
Delete all of them? (y/n)
等待用户回答时,使用平台提供的阻塞式提问工具:Claude Code 中使用 AskUserQuestion(若其 schema 未加载,先调用 ToolSearch 并传入 select:AskUserQuestion);Codex 中使用 request_user_input;Gemini 中使用 ask_user;Pi 中使用 ask_user(需要 pi-ask-user 扩展)。仅当运行环境中不存在阻塞式工具,或调用出错(例如 Codex 编辑模式)时,才退化为在聊天中展示列表。不得因为需要加载 schema 就跳过提问。这是针对整个列表的是/否决策,不提供多选或按分支单独选择。
第三步:删除已确认的分支。若用户确认,逐个删除分支。对每个分支:
- 检查是否有关联 worktree:git worktree list | grep "[$branch]"
- 若存在 worktree 且不是主仓库根目录,先移除:git worktree remove --force "$worktree_path"
- 删除分支:git branch -D "$branch"
删除过程中逐步报告结果,例如:
Removed worktree: .worktrees/feature/old-thing Deleted branch: feature/old-thing Deleted branch: bugfix/resolved-issue Deleted branch: experiment/abandoned
Cleaned up 3 branches.
若用户拒绝,则确认并停止,不删除任何内容。
适用场景
- 本地积累了多个远程已删除的分支,需要批量清理。
- 需要同时清理这些分支关联的 worktree。
- 希望在删除前先查看列表并统一确认。
限制
- 删除操作使用 git branch -D,属于强制删除,未合并的本地改动可能丢失。
- 确认环节为整体是/否决策,不支持按分支多选。
- 依赖运行环境提供阻塞式提问工具;若不存在或调用出错,则退化为聊天中展示列表。
- 关于收费、价格、平台支持范围等信息,资料中暂未提供。