ship

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Ship

交付(Ship)

Get the branch onto main. Two paths: PR (CI up) or local merge (CI down).
Announce: "Using /ship to integrate this branch."
将分支合并到main分支。有两种方式:PR(CI正常运行)或本地合并(CI故障)。
通知:"正在使用/ship命令集成此分支。"

Prerequisites

前置条件

  1. On a feature branch (not main).
  2. /review
    (Step 6) passed, or user explicitly approved.
  3. Worktree path is known (needed for cleanup).
If any prerequisite is missing, say which and stop.
  1. 当前处于功能分支(而非main分支)。
  2. /review(步骤6)已通过,或用户已明确批准。
  3. 工作树路径已知(用于清理)。
若缺少任何前置条件,说明具体缺失项并终止操作。

Step 1: Validate

步骤1:验证

bash
pnpm validate
If validation fails, stop. Fix first.
bash
pnpm validate
若验证失败,终止操作。需先修复问题。

Step 2: Determine base branch

步骤2:确定基准分支

bash
git -C <worktree> symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||'
Default:
main
. If ambiguous, ask.
bash
git -C <worktree> symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||'
默认值:
main
。若存在歧义,询问用户。

Step 3: Present options

步骤3:展示选项

CI status comes from conversation context — if the user has said CI is down, frozen, or at billing cap, treat as down. No auto-detection.
CI up (default):
Ready to ship.

1. Open PR + auto-merge
2. Keep branch as-is
3. Discard
CI down:
Ready to ship (CI down — local merge with review gate).

1. Local merge to main
2. Keep branch as-is
3. Discard
CI状态来自对话上下文——若用户提及CI已故障、冻结或达到计费上限,则视为CI故障。不自动检测。
CI正常运行(默认):
准备交付。

1. 发起PR并启用自动合并
2. 保留分支不变
3. 丢弃分支
CI故障:
准备交付(CI故障——通过本地合并并经过审核关卡)。

1. 本地合并到main分支
2. 保留分支不变
3. 丢弃分支

Option 1a: PR + auto-merge (CI up)

选项1a:PR + 自动合并(CI正常运行)

bash
git -C <worktree> push -u origin <branch>

GH_REPO=<owner/repo> gh pr create \
  --title "<conventional-commit-title>" \
  --body "$(cat <<'EOF'
bash
git -C <worktree> push -u origin <branch>

GH_REPO=<owner/repo> gh pr create \
  --title "<conventional-commit-title>" \
  --body "$(cat <<'EOF'

Summary

摘要

<2-3 bullets>
<2-3条要点>

Test plan

测试计划

  • <verification steps> EOF )"
GH_REPO=<owner/repo> gh pr merge --auto --merge

Report the PR URL. Proceed to worktree cleanup.

**If CI blocks or fails after PR is up:** STOP. Ask the user. No self-rescue, no local merge fallback, no force-merge.
  • <验证步骤> EOF )"
GH_REPO=<owner/repo> gh pr merge --auto --merge

汇报PR链接。继续执行工作树清理。

**若PR提交后CI出现阻塞或失败:**终止操作。询问用户。不自行补救,不切换到本地合并方案,不强制合并。

Option 1b: Local merge (CI down)

选项1b:本地合并(CI故障)

Dispatch the
code-reviewer
agent on the diff first — all autonomous code must be reviewed before merge:
bash
claude --agent code-reviewer "Review diff: git -C <worktree> diff main..HEAD"
If reviewer returns P0/P1 findings, STOP. Fix before proceeding.
Merge via shallow clone into the session directory — never the primary worktree (multi-agent safety):
bash
SHIP_DIR="$CLAUDE_SESSION_DIR/ship-merge"
[ -d "$SHIP_DIR" ] && rm -rf "$SHIP_DIR"
git clone --depth 1 "$(git -C <worktree> remote get-url origin)" "$SHIP_DIR"
git -C "$SHIP_DIR" fetch origin <branch>
git -C "$SHIP_DIR" merge FETCH_HEAD -m "merge: <branch> into main

Co-Authored-By: Claude <model>"
git -C "$SHIP_DIR" push
On non-fast-forward:
git -C "$SHIP_DIR" pull --rebase
then push. Max 3 retries. After 3, escalate to user.
Clean up the shallow clone after push:
rm -rf "$SHIP_DIR"
先调用
code-reviewer
代理审核差异——所有自主生成的代码必须在合并前经过审核:
bash
claude --agent code-reviewer "Review diff: git -C <worktree> diff main..HEAD"
若审核人员返回P0/P1级问题,终止操作。需先修复问题再继续。
通过浅克隆合并到会话目录——绝不能操作主工作树(多代理安全机制):
bash
SHIP_DIR="$CLAUDE_SESSION_DIR/ship-merge"
[ -d "$SHIP_DIR" ] && rm -rf "$SHIP_DIR"
git clone --depth 1 "$(git -C <worktree> remote get-url origin)" "$SHIP_DIR"
git -C "$SHIP_DIR" fetch origin <branch>
git -C "$SHIP_DIR" merge FETCH_HEAD -m "merge: <branch> into main

Co-Authored-By: Claude <model>"
git -C "$SHIP_DIR" push
若遇到非快进合并:执行
git -C "$SHIP_DIR" pull --rebase
后再推送。最多重试3次。3次后升级给用户处理。
推送完成后清理浅克隆目录:
rm -rf "$SHIP_DIR"

Option 2: Keep as-is

选项2:保留分支不变

Report: "Keeping branch
<name>
. Worktree preserved at
<path>
."
Do not clean up.
汇报:"保留分支
<name>
。工作树保留在
<path>
路径下。"
不执行清理操作。

Option 3: Discard

选项3:丢弃分支

Require typed "discard" confirmation. Show branch name, commit list, worktree path.
bash
git -C <primary> worktree remove <worktree-path>
git -C <primary> branch -D <branch>
git push origin --delete <branch> 2>/dev/null || true
要求用户输入“discard”进行确认。展示分支名称、提交记录列表、工作树路径。
bash
git -C <primary> worktree remove <worktree-path>
git -C <primary> branch -D <branch>
git push origin --delete <branch> 2>/dev/null || true

Worktree Cleanup

工作树清理

After PR (1a) or local merge (1b):
bash
git -C <primary> worktree remove <worktree-path>
PathCleanup worktree?
PR + auto-mergeYes
Local mergeYes
DiscardYes (in discard step)
Keep as-isNo
完成PR(1a)或本地合并(1b)后:
bash
git -C <primary> worktree remove <worktree-path>
路径是否清理工作树?
PR + 自动合并
本地合并
丢弃分支是(在丢弃步骤中执行)
保留分支不变

Integration

集成

Called by: /task (Step 8), /executing-plans, /subagent-driven-development Pairs with: /isolate (cleans up worktree it created), /review (must pass before /ship) Replaces: finishing-a-development-branch (superpowers)
调用方: /task(步骤8)、/executing-plans、/subagent-driven-development 搭配命令: /isolate(清理其创建的工作树)、/review(必须在/ship前通过) 替代: finishing-a-development-branch(增强版)