Files
.pouch/skills/manage-release/references/recovery.md
T
2026-08-04 13:55:16 +08:00

3.5 KiB

中断恢复与安全清理

恢复原则

每次重入都从 Git 和代码托管平台读取状态,不依赖上一轮聊天结论。先记录准确的 base、head、PR/MR、merged commit、tag 和 release,再执行唯一缺失的下一步。

网络或平台调用返回超时、未知状态或非结构化错误时,先用只读命令刷新远端状态。不要把 重试当成默认动作;创建 PR/MR、合并、推 tag 和创建 release 都可能已经成功。

常见部分状态

当前状态 继续方式 禁止事项
远端 release commit 已准备,没有 tag 核对版本与更新说明后直接创建 annotated tag 不创建无必要的分支或 worktree
本地 annotated tag 已创建但未推送 核对对象类型、commit 和完整说明后只推送该 tag 不因重入重复创建或改写 tag
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,生成并确认更新说明后继续发布 不重新合并
tag 已推送,没有 release 验证 tag 的 commit 和更新说明后创建 Forge Release 不创建替代 tag
tag 指向正确 commit 但为 lightweight 或说明不符 停止并交由维护者决定撤销或发布修订版本 不移动、覆盖或补写远端 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 默认不可变。commit 或更新说明错误时停止,由维护者决定撤销发布或发布新版本。
  • Forge Release 失败不回滚已经正确推送的 tag;从 release 阶段恢复。

清理规则

清理始终放在发布验证之后:

  1. 确认 worktree 没有修改、暂存或未跟踪文件。
  2. 确认分支提交已从远端 base 或已验证 tag 到达。
  3. 仅移除目标 linked worktree,不操作主 worktree,不使用 --force
  4. 删除本地分支前再次确认已合并。
  5. 删除本地或远端分支都必须有用户本次请求的明确授权;项目策略不能代替授权。
  6. 使用 git worktree prune --dry-run 查看陈旧记录;不要把 prune 当作普通清理步骤。

任何清理条件不满足时保留现场,并报告路径、分支、未提交状态和后续人工动作。