
AI 应用Agent 工作流开发工具MCP 服务【免费下载链接】cc-wf-studioCC Workflow Studio项目地址https://gitcode.com/gh_mirrors/cc/cc-wf-studio点击查看免费下载本文围绕 cc-wf-studio 开源仓库中自带的.claude/skills/pr-to-main-cleanup/SKILL.md展开讲解该 Skill 的触发时机、执行流程与底层原理在功能分支通过 PR 合入main之后如何安全地删除本地与远程的功能分支。读完本文你将理解为什么在这个仓库中必须使用-D强制删除、为什么删除前要先同步最新main并能拿到可直接复制运行的完整命令链。背景为什么需要「PR 合入后清理」cc-wf-studio 是一个 pnpm monorepo包含packages/core、packages/mcp、packages/cli、packages/vscode四个包开发遵循「功能分支从main切出、通过 PR 合回main」的分支模型见 docs/release-flow.md 的 Branch model 一节。在这个模型下一次典型的开发循环是从main创建功能分支仓库自带的.specify/scripts/bash/create-new-feature.sh会生成NNN-short-name形式的分支名在分支上提交代码带上.changeset/*.md版本变更由 Changesets 驱动详见 CLAUDE.md通过 PR 合入main合入方式是 squash-merge参见 CLAUDE.md 中的 commit 规范说明与 .claude/skills/pr-to-main/SKILL.md 中「mainmerges viasquash」的说明PR 合入后功能分支已经完成了它的使命继续保留会产生大量过期的本地/远程分支干扰后续的git branch、git checkout、git ls-remote等操作。pr-to-main-cleanup这个 Skill 正是为第 4 步服务的它让 Claude或任何加载了该 Skill 的 Agent在用户说「ブランチ削除」「cleanup」「マージ後の片付け」或明确要求删除已合入分支时自动完成本地与远程分支的清理。Skill 概览触发条件与作用域该 Skill 位于仓库根目录的.claude/skills/pr-to-main-cleanup/SKILL.md其 Frontmatter 定义了名称与触发描述--- name: pr-to-main-cleanup description: Clean up merged feature branches after PR to main is merged. Use when the user says ブランチ削除, cleanup, マージ後の片付け, or wants to delete a merged branch. ---从源码结构看.claude/skills/目录下还并列存放着其他几个配套 Skill如pr-to-main、pr-review-analysis、jira-driven-planning、workflow-schema-tuning它们共同覆盖了「PR 创建 → PR 评审 → PR 合入 → 合入后清理」的完整生命周期。其中pr-to-main负责「合入之前」判断改动涉及的包、确保 changeset 存在、按模板创建 PRpr-to-main-cleanup负责「合入之后」删除已被合并的功能分支与本 Skill 形成前后衔接。需要注意这个 Skill 是针对当前仓库「PR 合入main一律使用 squash-merge」这一仓库事实设计的其删除策略也依赖这一点如果仓库改用 merge commit 或 rebase 合入下述「为什么必须用-D」的结论需要重新评估。核心工作流两步清理Skill 定义了两步式工作流第一步并行收集上下文清理开始前先并行执行两个轻量命令确认当前所在分支与仓库状态git branch # 识别当前所在分支 git log --oneline -1 # 确认当前提交状态这一步的目的有两个一是避免「正在当前功能分支上时误删自己」——Git 本身也禁止删除当前所在分支但提前确认可以让 Agent 明确接下来要 checkout 的目标二是确认工作区干净、HEAD 指向预期提交防止在未提交改动存在时贸然切换分支导致丢失。第二步执行清理在确认上下文之后按顺序执行四步操作切到 main 分支从 origin 拉取最新 main同步合入状态见下文「为什么先 pull」删除本地功能分支删除远程功能分支。Skill 给出了一条可以直接执行的完整命令链git checkout main git pull origin main git branch -D branch-name git push origin --delete branch-name这条命令把四步串成一条链任何一个环节失败例如远程分支已不存在都会中断整条链避免在半途状态下继续执行后续删除这一点对「删除类操作」尤为重要——宁可停下来人工确认也不要静默跳过。两个关键注意事项的原理分析Skill 的 Important Notes 一节给出了两条规则这两条规则是理解本 Skill 设计意图的核心规则一squash-merge 下必须用-D强制删除PRs to main are always squash-merged, so use-D(force delete) since git cannot detect squash merges as merged这是整个 Skill 最核心的技术点。Git 判断一个分支是否「已合入」依赖的是提交图拓扑普通 merge 会在main上留下一个指向功能分支提交的 merge commitgit branch --merged可以沿提交图追踪到功能分支的 tip从而判定其「已合入」而squash-merge会把功能分支上的全部改动压扁成一个新提交落到main上。这个新提交是全新对象与功能分支上的原始提交没有任何父子关系功能分支的 tip 在提交图中是「游离」的。因此在 squash-merge 合入后git branch -d branch-name安全删除仅允许删除已合入的分支会以「分支未合入」为由拒绝删除。此时必须使用git branch -D强制删除。与之呼应的是仓库的另一条事实CLAUDE.md 明确写了「IMPORTANT: Keep commit messages simple for squash merge workflow」且 .claude/skills/pr-to-main/SKILL.md 说明「mainmerges viasquash, so the PR titlebecomesthe squash commit subject」——仓库以 squash-merge 为前提约束了 PR 标题与提交信息格式本 Skill 则针对同一前提处理合入后的分支回收二者是同一设计决策的一体两面。实操建议命令中的branch-name应替换为实际功能分支名。若不确定哪些分支已合入可以先执行git branch --merged main查看——但要注意由于 squash-merge 的特性这个列表可能并不包含实际已合入的功能分支最终仍要以 PR 状态为准。规则二删除前先同步最新 mainAlways pull latest main before deleting to sync merge status「先 pull 再删」是一个防御性步骤如果本地main落后于远程本地提交图就看不到刚发生的 squash-mergegit branch -d会更坚决地拒绝删除虽然我们本来就用-D更重要的是删除操作与 PR 合入状态之间的时序关系要成立——只有在确认 PR 确实已合入、且本地已经拿到该合入结果之后删除才是安全的。否则可能误删一个「以为已合入、其实还没合入」的分支。此外先git checkout main再git pull origin main还有一个实际作用确保清理操作始终以main为锚点执行并且为后续可能的 release 流程如 docs/release-flow.md 中描述的 Release PR 合并触发自动发布保持一个最新的本地main。与仓库其他文档/技能的关联本 Skill 不是孤立存在的它处在一个环环相扣的流程中环节对应文件说明创建功能分支.specify/scripts/bash/create-new-feature.sh生成NNN-short-name分支名并切出分支提交规范CLAUDE.mdfeat:/fix:/improvement:等类型、50 字符限制、squash merge 前提创建 PR.claude/skills/pr-to-main/SKILL.md确保 changeset、按模板创建 PR、PR 标题即 squash commit 主题合入后清理.claude/skills/pr-to-main-cleanup/SKILL.md删除本地与远程功能分支本文主题发布流程docs/release-flow.mdmain 是唯一发布分支Release PR 合入自动发布其中发布流程对分支模型的约束直接支撑了本 Skill 的合理性docs/release-flow.md 明确「main— the one and only release branch. Feature work branches offmainand merges back via PR」功能分支是临时载体合入后即失去价值清理正是对这一分支模型的自然收尾。使用注意事项与边界删除是破坏性操作git branch -D与git push origin --delete均不可撤销本地分支的 dangling commit 短期内可通过 reflog 找回但远程分支删除后他人本地缓存会失效。执行前应确认 PR 确实已合入、分支名正确避免误删仍在并行开发的分支。保持对仓库规范的遵守根据 CLAUDE.md仓库的 GitHub Issue/PR 内容须使用英文但用户口头触发清理如「ブランチ削除」「cleanup」可按对话语言处理执行命令与输出面向用户呈现时建议保持命令原文。适用范围本 Skill 针对当前仓库「PR 合入 main 一律 squash-merge」的约定编写。若仓库变更合入方式规则一必须用-D的前提将不再成立需要同步调整。远程分支可能已被删除若远程分支已在 Web 界面或--prune时被清理git push origin --delete branch-name会报错并使命令链中断——这是预期行为中断比静默跳过更安全。小结pr-to-main-cleanup是一个小而精的 Agent Skill它以「PR 合入 main 后回收功能分支」为唯一目标用一条命令链覆盖「切分支 → 同步 → 删本地 → 删远程」四个动作并通过两条 Important Notes 把仓库的 squash-merge 事实必须-D强删与删除时序安全先 pull 再删固化成了可复用的行为准则。对于同样采用 squash-merge 单一main发布分支的团队可以直接复用这套清理思路与命令作为分支生命周期管理的最小闭环。赞分享AI 应用Agent 工作流开发工具MCP 服务【免费下载链接】cc-wf-studioCC Workflow Studio项目地址https://gitcode.com/gh_mirrors/cc/cc-wf-studio点击查看免费下载相关推荐PX4 开发实战将分支安全 rebase 到 main正确处理已被 squash-merge 的父分支PX4 开发实战将分支安全 rebase 到 main正确处理已被 squash merge 的父分支 导读 本文以 PX4 Autopilot 仓库内置的嵌入式物联网机器人自动驾驶智能硬件Worktrunk wt merge 实战指南一键完成 Squash、Rebase、合并与清理的本地合并工作流Worktrunk wt merge 实战指南一键完成 Squash、Rebase、合并与清理的本地合并工作流 wt merge 是 Worktrunk 面向开发工具CLI版本控制AI Agent人工智能Ekko Studio PR 自审清单基于 hermes-studio 仓库 Harness 的推送前质量关卡实践Ekko Studio PR 自审清单基于 hermes studio 仓库 Harness 的推送前质量关卡实践 本篇指南以 hermes studio 仓AI 应用人工智能AI Agent本地部署前端后端工作流自动化上一篇pnpm 生态新能力pnpr 对 npm、Cargo 与 Python 注册表包名的统一规范化Canonicalization解析下一篇免费解锁Adobe全家桶Adobe-GenP 3.0完整使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考