Create GitHub Pull Request
Create a draft pull request using gh CLI, following the project's pull_request_template.md format.
Process
- •
Run these commands in parallel to understand the current state:
- •
git statusto see all changes (never use-uallflag) - •
git branch --show-currentto get current branch name - •
git log origin/main..HEAD --onelineto see commits that will be in the PR - •
git diff origin/main...HEAD --statto see changed files summary
- •
- •
Read the PR template from
.github/pull_request_template.md - •
Check if the current branch tracks a remote:
- •If not, push with
-uflag:git push -u origin <branch-name>
- •If not, push with
- •
Analyze all commits and changes, then fill in the template sections:
- •Summary (Why/What/Solution): Based on commit messages and diffs
- •Impact Area: List affected features/components
- •Types of Changes: Mark
[x]for applicable types based on commits - •Test Plan: Suggest testing steps
- •Checklist: Pre-check applicable items
- •Related Issues: Leave empty or fill if mentioned in commits
- •
Create the draft PR using HEREDOC format:
bash
gh pr create --draft --title "type(scope): description" --body "$(cat <<'EOF' <filled template content here> EOF )"
PR Title Convention
Use Conventional Commits format:
| Type | Description |
|---|---|
feat | A new feature |
fix | A bug fix |
docs | Documentation only changes |
style | Changes that do not affect the meaning of the code |
refactor | A code change that neither fixes a bug nor adds a feature |
perf | A code change that improves performance |
build | Changes that affect the build system or external deps |
ci | Changes to CI configuration files and scripts |
chore | Other changes that don't modify src or test files |
Mapping Commit Types to PR Types
When filling "Types of Changes" section:
- •
feat→ 🚀 New feature - •
fix→ 🕷 Bug fix - •
perf→ 👏 Performance optimization - •
refactor→ 🛠 Refactor - •
docs→ 📝 Documentation - •
test→ ✅ Test - •
build,chorewith deps → 📗 Library update
Arguments
If $ARGUMENTS is provided:
- •If it looks like a PR title, use it directly
- •If it looks like a branch name (e.g.,
main,develop), use it as base branch with--base
Options
Common gh pr create options:
- •
--base <branch>: Target branch (default: main) - •
--assignee @me: Assign to yourself - •
--label <name>: Add labels - •
--reviewer <handle>: Request reviewers
Important
- •ALWAYS read
.github/pull_request_template.mdfirst to get the current template format - •ALWAYS create PR as draft using
--draftflag - •ALWAYS check that you're on the correct branch before creating PR
- •NEVER create PR from
mainormasterbranch - •ALWAYS ensure changes are pushed to remote before creating PR
- •Remove HTML comments (
<!-- -->) from the filled template - •Return the PR URL when done so the user can review and publish when ready