mcpField
C
cleanup-merged-branches

cleanup-merged-branches

github.com/timschoch开发1730 次安装1 天前更新
代码仓库

关于 cleanup-merged-branches

用于清理已合并 PR 对应的远程分支,并回收废弃的进行中 Issue 标记。操作先执行预览,任何更改都必须经过明确确认。

主要功能

  1. 01预览待删分支
  2. 02检查合并状态与保护规则
  3. 03回收过期的进行中标记
  4. 04检查关联的开放 PR
  5. 05查找合并后仍开放的 Issue

适用场景

  1. 01删除前审查候选分支
  2. 02将废弃任务放回待处理队列
  3. 03查找已合并但 Issue 仍开放的工作

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/timschoch/skilly --skill cleanup-merged-branches

安装后在 Claude Code 中输入/cleanup-merged-branches确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

scripts/
plan.sh
stale-claims.sh
stale-claims.test.sh

详细介绍

删除属于已合并 PR 的远程分支。此操作具有破坏性,因此首先以 dry-run 模式运行,未经明确确认绝不删除。

删除规则

只有在所有条件都满足时,分支才可删除——规则写在 scripts/plan.sh 中,它是唯一事实来源:

  • 分支仍存在于远程仓库,
  • 分支有已合并的 PR,
  • 分支没有未关闭的 PR,
  • 分支不受保护。

受保护 = 默认分支 + staging。即使有已合并的 PR 指向这些分支,也绝不删除。没有 PR,或只有已关闭但未合并的 PR 的分支,不可删除(它从未“属于已合并的 PR”)。只在 scripts/plan.sh 中的 is_protected() 里扩展受保护分支列表,别处不要改。

步骤

  1. Dry-run。 运行 bash scripts/plan.sh(如果远程名称不是 origin,则将远程名称作为 $1 传入)。它会以 <branch> #<pr> <title> 的格式列出可删除的分支,不会删除任何内容。得到列表后即完成。输出为空 → 报告“没有需要清理的内容”并停止。
  2. 展示并确认。 向用户展示完整列表,并征求明确同意。对含糊的回复不要执行删除——只有明确答复是才可以删除。每次运行都必须经过此确认关卡。
  3. 删除。 对每个已确认的分支运行:git push origin --delete <branch>。不得删除计划列表以外的任何内容。
  4. 报告。 列出已删除的内容;注明任何推送失败的情况。

另外:过期声明(清理器)

释放已放弃的 in-progress 声明(Agent 崩溃/会话结束/从未创建 PR),以免失效声明永远将问题标记为“已被认领”。标签说明见 docs/agents/triage-labels.md;/implement 会设置此标签,PR 创建后会移除,清理器负责清除遗留标签。

过期规则。 只有在所有条件都满足时,in-progress 问题才算过期——规则写在 scripts/stale-claims.sh 中,它是唯一事实来源:

  • 问题处于开启状态且带有 in-progress 标签,
  • 问题没有关联的未关闭 PR(关联 = 未关闭 PR 的标题/正文中引用了 #N,或其 head 分支与声明评论中指定的分支相同),并且
  • in-progress 标签的时间已超过阈值(以最新的 labeled 时间线事件为准):默认 24h,可通过 $1/$STALE_CLAIM_HOURS 覆盖。

步骤(与分支删除合并到同一次运行,并共用同一确认关卡):

  1. Dry-run。 运行 bash scripts/stale-claims.sh [hours]。它会以 #<n> <title> 的格式列出过期声明,不会更改任何内容。输出为空 → 无需清理。(逻辑验证:bash scripts/stale-claims.test.sh。)
  2. 展示并确认。 展示列表;只有得到明确同意才执行清理。必须经过同一确认关卡。
  3. 清理。 对每个已确认的问题运行:gh issue edit N --remove-label in-progress --add-label ready-for-agent(已放弃的工作会重新进入空闲队列)。不得触碰打印列表以外的任何内容。

另外:仍未关闭的问题

Closes #N 只有在 PR 合并到默认分支时才会自动关闭问题——合并到集成分支(例如 rebuild/v1)的 PR 会让 #N 永远保持开启状态。对于在此处清理的每个已合并 PR,请检查其关联问题:如果工作已进入默认分支,但问题仍处于开启状态,则手动关闭问题(gh issue close #N --reason completed --comment "merged via #<pr>")。同样的失误会让已“完成”的问题仍显示为开启状态——就在这里检查并处理。

评论

支持 Markdown