home / skills / charlesjones-dev / claude-code-plugins-dev / git-commit-push-pr

git-commit-push-pr skill

/plugins/ai-git/skills/git-commit-push-pr

This skill guides you through branching, committing, pushing, and creating a PR, using interactive prompts to minimize typing.

npx playbooks add skill charlesjones-dev/claude-code-plugins-dev --skill git-commit-push-pr

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
4.1 KB
---
name: git-commit-push-pr
version: 1.0.0
description: |
  Commit, push, and create a PR. Prompts for branch and PR target
  using quick multi-choice questions. Lightweight alternative to
  /workflow-ship without preflight checks.
allowed-tools:
  - Bash
  - Read
  - Grep
  - Glob
  - AskUserQuestion
disable-model-invocation: true
---

# /git-commit-push-pr - Commit, Push, PR

You are a shipping assistant. Your job is to get the current branch shipped by committing, pushing, and opening a PR. Use `AskUserQuestion` for all user prompts so the flow is fast with minimal typing.

## Process

### Step 1: Branch + Commit

First, determine the current branch:
```bash
git branch --show-current
```

Then run `git status` (never -uall) and `git diff` to understand changes. If there are no changes, tell the user and stop.

**Branch prompt:** Use `AskUserQuestion` to ask the user where to commit:

- If on `main` or `master`: Do NOT allow committing directly. Present options:
  - "Create new branch" (description: "Create a feature/fix branch for these changes")
  - The user picks "Other" to type a custom branch name

- If on any other branch (staging, feature/*, fix/*, etc.): Present options:
  - "Current branch ({branch_name})" (description: "Commit directly to {branch_name}") - mark as first/recommended option
  - "Create new branch" (description: "Create a new branch off {branch_name} for these changes")

If the user chooses "Create new branch" or types a custom name via "Other":
1. Create and checkout the new branch: `git checkout -b <branch_name>`

Then proceed with the commit:
1. Run `git log --oneline -5` to match the repo's commit message style
2. Stage relevant files (prefer specific files over `git add -A`)
3. Draft a concise commit message focused on the "why"
4. Create the commit with the Co-Authored-By trailer:
   ```
   Co-Authored-By: Claude Opus 4.6 <[email protected]>
   ```
5. Use a HEREDOC for the commit message to ensure proper formatting

### Step 2: Push

1. Check if the current branch tracks a remote: `git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null`
2. Push to remote with `-u` flag if no upstream is set, otherwise a normal push
3. Verify the push succeeded

### Step 3: Create PR

First, gather context:
```bash
# Current branch
git branch --show-current

# Check if staging exists on origin
git ls-remote --heads origin staging

# Check if main exists on origin
git ls-remote --heads origin main
```

**PR target prompt:** Use `AskUserQuestion` to ask where the PR should merge into. Build the options dynamically based on what exists:

- If the current branch is `staging`: only offer `main` (and "Other" is always available for custom input)

- If the current branch is anything else (feature/*, fix/*, etc.):
  - If `staging` exists on origin: offer these options:
    - "staging" (description: "Merge into staging for pre-production review") - mark as first/recommended
    - "main" (description: "Merge directly into main/production")
  - If `staging` does NOT exist on origin: offer these options:
    - "main" (description: "Merge into main") - mark as first/recommended

The user can always pick "Other" to type any custom branch name.

Then create the PR:
1. Run `git log <target>..HEAD --oneline` to understand all commits being included
2. Run `git diff <target>...HEAD` to see the full diff
3. Create a PR using `gh pr create` with:
   - `--base <target_branch>` to set the merge target
   - A short title (under 70 characters)
   - A body with Summary bullets and Test plan
   - Use HEREDOC format for the body
   - Include the Claude Code attribution footer

Format:
```
gh pr create --base <target_branch> --title "the pr title" --body "$(cat <<'EOF'
## Summary
<1-3 bullet points>

## Test plan
<checklist of testing steps>

šŸ¤– Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"
```

4. Return the PR URL to the user

## Important rules

- Always use `AskUserQuestion` for branch and PR target prompts (never assume)
- Never force push
- Never commit or push directly to main/master
- If there are no changes to commit, tell the user and stop
- Do not commit files that look like secrets (.env, credentials, etc.)

Overview

This skill automates the common git flow: commit changes, push them, and open a pull request. It prompts the user with quick multi-choice questions for branch selection and PR target so shipping is fast and consistent. It is a lightweight alternative to heavier preflight workflows.

How this skill works

The skill inspects the working tree (git status and git diff) and determines the current branch. It prompts the user to choose whether to commit to the current branch or create a new branch, stages selected files, crafts a concise commit message, and adds a Co-Authored-By trailer. Then it checks upstream configuration, pushes the branch, and prompts for a PR target. Finally it gathers commit and diff context and runs gh pr create with a structured title and body.

When to use it

  • You have local changes and want a quick, guided way to ship them.
  • You prefer an interactive, minimal-typing flow for branch and PR decisions.
  • You need to avoid committing directly to main or master.
  • You want a fast alternative to a full preflight or CI gating workflow.
  • You want a standardized PR body with summary and test plan.

Best practices

  • Never commit secrets or sensitive files (e.g., .env, credentials).
  • Prefer staging specific files to git add -A so unrelated changes are excluded.
  • Do not allow commits directly to main/master; create a branch instead.
  • Use clear, why-focused commit messages and concise PR titles (<70 chars).
  • Verify push success before creating the PR and avoid force pushes.

Example use cases

  • Finish a small bugfix on a feature branch: commit, push, and open a PR into staging.
  • You accidentally worked on main — create a new branch, move changes there, push, and open a PR.
  • Ship a feature from a local feature/* branch into staging or main with minimal prompts.
  • Create a hotfix branch, include Co-Authored-By attribution, push, and open a production PR.

FAQ

What if there are no changes to commit?

The skill will detect no changes, inform you, and stop — no commit or push will be attempted.

Can I commit directly to main or master?

No. The tool disallows committing directly to main/master; it forces creation of a branch to protect the primary branches.