Finishing A Development Branch
当实现完成、所有测试通过、需要决定如何集成这份工作时使用
Install
npx skills add jnMetaCode/superpowers-zh --skill finishing-a-development-branch -g -a claude-code -y- Repository
- jnMetaCode/superpowers-zh8.4k
- Category
- Engineering
- Updated
- 9d ago
- License
- MIT
- Context cost
- Lightabout 1,084 tokens
- Runs scripts
- No, instructions only
What it does
当实现完成、所有测试通过、需要决定如何集成这份工作时使用
收尾一个开发分支
概述
核心原则: 验证测试 → 检测环境 → 展示选项 → 执行选择 → 清理。
开始时宣告: "我正在使用 finishing-a-development-branch 技能来收尾这份工作。"
步骤 1:验证测试
运行项目的完整测试套件(npm test / cargo test / pytest / go test ./...)。
如果测试失败,报告失败并停下, , 菜单是在测试全绿之后才出现的:
测试失败(<N> 个)。完成之前必须先修:
[展示失败详情]
如果测试通过: 继续步骤 2。
步骤 2:检测环境
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
# 现在就捕获, , 此刻还在工作区里面。步骤 5 会切换目录,
# 而清理(步骤 6)需要这个值
WORKTREE_PATH=$(git rev-parse --show-toplevel)
这决定了展示哪种菜单、以及清理方式:
| 状态 | 菜单 | 清理 |
|---|---|---|
GIT_DIR == GIT_COMMON(普通仓库) | 标准 3 个选项 | 无 worktree 可清理 |
GIT_DIR != GIT_COMMON,命名分支 | 标准 3 个选项 | 按来源判断(见步骤 6) |
GIT_DIR != GIT_COMMON,分离 HEAD | 收敛为 2 个选项(不含合并) | 由外部管理, , 原地别动 |
步骤 3:确定基础分支
基础分支就是这份工作从哪儿分出来的那个, , 通常在计划里、对话里,或者分支的 upstream 里已经写明了。如果还不知道,就问:"这个分支是从 <你的最佳猜测> 分出来的,对吗?"合并之前先确认:合并到错误的基础分支,代价很高。
步骤 4:展示选项
普通仓库和命名分支 worktree, , 精确展示这 3 个选项:
实现已完成。你想怎么做?
1. 本地合并回 <base-branch>
2. 推送并创建 Pull Request
3. 保留分支不动(我稍后自己处理)
选哪个?
分离 HEAD, , 精确展示这 2 个选项:
实现已完成。你当前处于分离 HEAD(由外部管理的工作区)。
1. 作为新分支推送并创建 Pull Request
2. 保持原样(我稍后自己处理)
选哪个?
照原文展示菜单, , 简洁,每个选项都来自上面的列表。丢弃工作只在你的人类伙伴明确提出时才发生(见下方"如果你的人类伙伴要求丢弃这份工作")。等他们回答;集成与否是他们的决定。
步骤 5:执行选择
选项 1:本地合并
# 切到主仓库根目录,保证 CWD 安全
MAIN_ROOT=$(git -C "$(git rev-parse --git-common-dir)/.." rev-parse --show-toplevel)
cd "$MAIN_ROOT"
# 先合并, , 在删除任何东西之前先验证合并成功
git checkout <base-branch>
git pull
git merge <feature-branch>
# 在合并结果上验证测试
<测试命令>
如果测试在合并结果上失败:停下,把 worktree 和分支原地留着,去排查, , 什么都还没推送,所以这次合并是本地的、可恢复的。
一旦合并结果全绿:清理 worktree(步骤 6),然后删除分支:
git branch -d <feature-branch>
选项 2:推送并创建 PR
git push -u origin <feature-branch>
# 从分离 HEAD 出发时,在远端指定新分支名:
# git push origin HEAD:refs/heads/<new-branch>
