
AI 應用Agent 工作流開發(fā)工具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 的觸發(fā)時機、執(zhí)行流程與底層原理在功能分支通過 PR 合入main之后如何安全地刪除本地與遠程的功能分支。讀完本文你將理解為什么在這個倉庫中必須使用-D強制刪除、為什么刪除前要先同步最新main并能拿到可直接復制運行的完整命令鏈。背景為什么需要「PR 合入后清理」cc-wf-studio 是一個 pnpm monorepo包含packages/core、packages/mcp、packages/cli、packages/vscode四個包開發(fā)遵循「功能分支從main切出、通過 PR 合回main」的分支模型見 docs/release-flow.md 的 Branch model 一節(jié)。在這個模型下一次典型的開發(fā)循環(huán)是從main創(chuàng)建功能分支倉庫自帶的.specify/scripts/bash/create-new-feature.sh會生成NNN-short-name形式的分支名在分支上提交代碼帶上.changeset/*.md版本變更由 Changesets 驅動詳見 CLAUDE.md通過 PR 合入main合入方式是 squash-merge參見 CLAUDE.md 中的 commit 規(guī)范說明與 .claude/skills/pr-to-main/SKILL.md 中「mainmerges viasquash」的說明PR 合入后功能分支已經完成了它的使命繼續(xù)保留會產生大量過期的本地/遠程分支干擾后續(xù)的git branch、git checkout、git ls-remote等操作。pr-to-main-cleanup這個 Skill 正是為第 4 步服務的它讓 Claude或任何加載了該 Skill 的 Agent在用戶說「ブランチ削除」「cleanup」「マージ後の片付け」或明確要求刪除已合入分支時自動完成本地與遠程分支的清理。Skill 概覽觸發(fā)條件與作用域該 Skill 位于倉庫根目錄的.claude/skills/pr-to-main-cleanup/SKILL.md其 Frontmatter 定義了名稱與觸發(fā)描述--- 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 創(chuàng)建 → PR 評審 → PR 合入 → 合入后清理」的完整生命周期。其中pr-to-main負責「合入之前」判斷改動涉及的包、確保 changeset 存在、按模板創(chuàng)建 PRpr-to-main-cleanup負責「合入之后」刪除已被合并的功能分支與本 Skill 形成前后銜接。需要注意這個 Skill 是針對當前倉庫「PR 合入main一律使用 squash-merge」這一倉庫事實設計的其刪除策略也依賴這一點如果倉庫改用 merge commit 或 rebase 合入下述「為什么必須用-D」的結論需要重新評估。核心工作流兩步清理Skill 定義了兩步式工作流第一步并行收集上下文清理開始前先并行執(zhí)行兩個輕量命令確認當前所在分支與倉庫狀態(tài)git branch # 識別當前所在分支 git log --oneline -1 # 確認當前提交狀態(tài)這一步的目的有兩個一是避免「正在當前功能分支上時誤刪自己」——Git 本身也禁止刪除當前所在分支但提前確認可以讓 Agent 明確接下來要 checkout 的目標二是確認工作區(qū)干凈、HEAD 指向預期提交防止在未提交改動存在時貿然切換分支導致丟失。第二步執(zhí)行清理在確認上下文之后按順序執(zhí)行四步操作切到 main 分支從 origin 拉取最新 main同步合入狀態(tài)見下文「為什么先 pull」刪除本地功能分支刪除遠程功能分支。Skill 給出了一條可以直接執(zhí)行的完整命令鏈git checkout main git pull origin main git branch -D branch-name git push origin --delete branch-name這條命令把四步串成一條鏈任何一個環(huán)節(jié)失敗例如遠程分支已不存在都會中斷整條鏈避免在半途狀態(tài)下繼續(xù)執(zhí)行后續(xù)刪除這一點對「刪除類操作」尤為重要——寧可停下來人工確認也不要靜默跳過。兩個關鍵注意事項的原理分析Skill 的 Important Notes 一節(jié)給出了兩條規(guī)則這兩條規(guī)則是理解本 Skill 設計意圖的核心規(guī)則一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應替換為實際功能分支名。若不確定哪些分支已合入可以先執(zhí)行git branch --merged main查看——但要注意由于 squash-merge 的特性這個列表可能并不包含實際已合入的功能分支最終仍要以 PR 狀態(tài)為準。規(guī)則二刪除前先同步最新 mainAlways pull latest main before deleting to sync merge status「先 pull 再刪」是一個防御性步驟如果本地main落后于遠程本地提交圖就看不到剛發(fā)生的 squash-mergegit branch -d會更堅決地拒絕刪除雖然我們本來就用-D更重要的是刪除操作與 PR 合入狀態(tài)之間的時序關系要成立——只有在確認 PR 確實已合入、且本地已經拿到該合入結果之后刪除才是安全的。否則可能誤刪一個「以為已合入、其實還沒合入」的分支。此外先git checkout main再git pull origin main還有一個實際作用確保清理操作始終以main為錨點執(zhí)行并且為后續(xù)可能的 release 流程如 docs/release-flow.md 中描述的 Release PR 合并觸發(fā)自動發(fā)布保持一個最新的本地main。與倉庫其他文檔/技能的關聯本 Skill 不是孤立存在的它處在一個環(huán)環(huán)相扣的流程中環(huán)節(jié)對應文件說明創(chuàng)建功能分支.specify/scripts/bash/create-new-feature.sh生成NNN-short-name分支名并切出分支提交規(guī)范CLAUDE.mdfeat:/fix:/improvement:等類型、50 字符限制、squash merge 前提創(chuàng)建 PR.claude/skills/pr-to-main/SKILL.md確保 changeset、按模板創(chuàng)建 PR、PR 標題即 squash commit 主題合入后清理.claude/skills/pr-to-main-cleanup/SKILL.md刪除本地與遠程功能分支本文主題發(fā)布流程docs/release-flow.mdmain 是唯一發(fā)布分支Release PR 合入自動發(fā)布其中發(fā)布流程對分支模型的約束直接支撐了本 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 找回但遠程分支刪除后他人本地緩存會失效。執(zhí)行前應確認 PR 確實已合入、分支名正確避免誤刪仍在并行開發(fā)的分支。保持對倉庫規(guī)范的遵守根據 CLAUDE.md倉庫的 GitHub Issue/PR 內容須使用英文但用戶口頭觸發(fā)清理如「ブランチ削除」「cleanup」可按對話語言處理執(zhí)行命令與輸出面向用戶呈現時建議保持命令原文。適用范圍本 Skill 針對當前倉庫「PR 合入 main 一律 squash-merge」的約定編寫。若倉庫變更合入方式規(guī)則一必須用-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發(fā)布分支的團隊可以直接復用這套清理思路與命令作為分支生命周期管理的最小閉環(huán)。贊分享AI 應用Agent 工作流開發(fā)工具MCP 服務【免費下載鏈接】cc-wf-studioCC Workflow Studio項目地址https://gitcode.com/gh_mirrors/cc/cc-wf-studio點擊查看免費下載相關推薦PX4 開發(fā)實戰(zhàn)將分支安全 rebase 到 main正確處理已被 squash-merge 的父分支PX4 開發(fā)實戰(zhàn)將分支安全 rebase 到 main正確處理已被 squash merge 的父分支 導讀 本文以 PX4 Autopilot 倉庫內置的嵌入式物聯網機器人自動駕駛智能硬件Worktrunk wt merge 實戰(zhàn)指南一鍵完成 Squash、Rebase、合并與清理的本地合并工作流Worktrunk wt merge 實戰(zhàn)指南一鍵完成 Squash、Rebase、合并與清理的本地合并工作流 wt merge 是 Worktrunk 面向開發(fā)工具CLI版本控制AI Agent人工智能Ekko Studio PR 自審清單基于 hermes-studio 倉庫 Harness 的推送前質量關卡實踐Ekko Studio PR 自審清單基于 hermes studio 倉庫 Harness 的推送前質量關卡實踐 本篇指南以 hermes studio 倉AI 應用人工智能AI Agent本地部署前端后端工作流自動化上一篇pnpm 生態(tài)新能力pnpr 對 npm、Cargo 與 Python 注冊表包名的統(tǒng)一規(guī)范化Canonicalization解析下一篇免費解鎖Adobe全家桶Adobe-GenP 3.0完整使用指南創(chuàng)作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考