# Ship

> Commit, push, and optionally create or update a PR for the current staged changes. Use when the user asks to "ship", "ship it", "ship changes", "commit push and PR", or "ship this".

- Skill: `majiayu000/ship-7` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/ship-7`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/ship-7/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/ship-7

---


# Ship

Commit, push, and optionally create or update a PR for the current staged changes.

## Step 1: Determine Intent

Detect the repository's default branch via `gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'`. Check the current branch name and whether a PR already exists for it using `gh pr view`.

Use `AskUserQuestion` to ask the user how to proceed. Present the options based on the current state:

- **On a feature branch with an existing PR** — commit, push, and update the PR; or commit and push
- **On a feature branch without a PR** — commit, push, and create a PR; or commit and push
- **On the default branch** — create a feature branch, commit, push, and create a PR; or commit and push
- **Abort** — leave changes staged, do not commit

## Step 2: Branch (if Needed)

If the user wants a PR and the current branch is the default branch:

1. Suggest a branch name based on the changes and use `AskUserQuestion` to confirm or adjust
2. Create and switch to the new branch: `git checkout -b <branch-name>`

## Step 3: Check for Unstaged Changes

Run `git status` to check for unstaged changes. If any exist, stage them. This catches files modified by auto-formatters that were not re-staged.

## Step 4: Run `/commit-staged-push` Skill

Run the `/commit-staged-push` skill.

If the commit fails due to a pre-commit hook (formatter, linter), fix the issues — or run the project's format/lint script to auto-fix — then **re-stage all modified files** before retrying. Pre-commit hooks may modify files in the working tree without updating the staging area.

## Step 5: Create or Update PR (if Requested)

- **Create PR** — run the `/create-pr` skill
- **Update PR** — run the `/update-pr` skill

Then use the TaskList tool and proceed to any remaining task.

## Rules

- Never stage or commit files containing secrets (`.env`, credentials, API keys). Warn if detected.

