# 中断恢复与安全清理 ## 恢复原则 每次重入都从 Git 和代码托管平台读取状态,不依赖上一轮聊天结论。先记录准确的 base、head、PR/MR、merged commit、tag 和 release,再执行唯一缺失的下一步。 网络或平台调用返回超时、未知状态或非结构化错误时,先用只读命令刷新远端状态。不要把 重试当成默认动作;创建 PR/MR、合并、推 tag 和创建 release 都可能已经成功。 ## 常见部分状态 | 当前状态 | 继续方式 | 禁止事项 | |---|---|---| | worktree 已创建,无改动 | 继续开发,或经授权移除干净 worktree | 不使用强制删除 | | 本地发布分支已存在,没有 worktree | 核对版本身份、tip、upstream 和 base 后挂载现有分支 | 不用 `-b` 覆盖分支 | | 分支已推送,没有 PR/MR | 确认 head/base 后创建一次 PR/MR | 不重复推送新分支 | | PR/MR 已存在,未合并 | 复用 URL,刷新 checks、review 和冲突状态 | 不创建第二个 PR/MR | | PR/MR 已合并,没有 tag | 获取 merged commit,在该 commit 上继续发布 | 不重新合并 | | tag 已推送,没有 release | 验证 tag 后创建 Forge Release | 不创建替代 tag | | release 已创建,验证未完成 | 读回 release、tag 和可见性 | 不直接声称发布完成 | | 同名资源身份不匹配 | 停止并报告差异 | 不覆盖、关闭或删除未知资源 | ## 并发冲突 两个 Agent 或维护者可能同时准备相同版本。创建分支、PR/MR、tag 或 release 前都重新查询 目标是否存在。推 tag 前立即检查远端引用;push 因同名引用失败时保持失败,不要 force。 base 在开发期间前进时,让 PR/MR 和仓库规则决定是否需要更新分支。已经推送的发布分支 不在本 Skill 中重写历史;需要更新时优先创建普通提交,或交给平台的 update branch、 merge queue 和 auto-merge。任何 force push 都是硬停止条件。 ## 回滚边界 - 未推送的本地版本提交可以在用户授权下修改或放弃,但不要覆盖其他工作。 - 已推送但未合并的 PR/MR 可以关闭,分支默认保留。 - 已合并变更通过新的 revert PR/MR 回滚,不重写 base 历史。 - 已发布 tag 默认不可变。tag 错误时停止,由维护者决定撤销发布或发布新版本。 - Forge Release 失败不回滚已经正确推送的 tag;从 release 阶段恢复。 ## 清理规则 清理始终放在发布验证之后: 1. 确认 worktree 没有修改、暂存或未跟踪文件。 2. 确认分支提交已从远端 base 或已验证 tag 到达。 3. 仅移除目标 linked worktree,不操作主 worktree,不使用 `--force`。 4. 删除本地分支前再次确认已合并。 5. 删除本地或远端分支都必须有用户本次请求的明确授权;项目策略不能代替授权。 6. 使用 `git worktree prune --dry-run` 查看陈旧记录;不要把 prune 当作普通清理步骤。 任何清理条件不满足时保留现场,并报告路径、分支、未提交状态和后续人工动作。