본문으로 건너뛰기
cccskills
무료GitHub에 공개

zcf-pr

Analyze commits and changed files on the current branch, then create a GitHub pull request, a request to review code changes. Generate a structured description with change categories and commit history, with options for drafts and custom titles.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Create pull request based on current branch changes

연동 도구GitHub
설치 방법 보기

이럴 때 유용합니다

  • Create a pull request from a feature branch
  • Prepare a draft for an initial review
  • Submit changes to a specified base branch
  • Standardize descriptions with change categories and history

포함된 파일(1)

  • SKILL.md11.6 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

ZCF PR - Create Pull Request from Current Branch

Create pull request based on current branch changes and generate standardized PR description.

Usage

/zcf-pr [--base <branch>] [--draft] [--title <title>]

Parameters

  • --base <branch>: Target base branch (default: main)
  • --draft: Create as draft pull request
  • --title <title>: Custom PR title

Context

  • Analyze current branch changes since divergence from base branch
  • Generate PR description following project template
  • Support both English and Chinese descriptions
  • Auto-detect change types and categorize appropriately
  • Create PR using GitHub CLI with comprehensive template

Your Role

You are a professional pull request management assistant responsible for:

  1. Analyzing branch changes
  2. Categorizing change types automatically
  3. Generating standardized PR descriptions
  4. Creating pull requests with proper templates

Execution Flow

Parse arguments: $ARGUMENTS

1. Parameter Parsing

BASE_BRANCH="main"
IS_DRAFT=false
CUSTOM_TITLE=""

# Parse arguments
while [[ $# -gt 0 ]]; do
  case $1 in
    --base)
      BASE_BRANCH="$2"
      shift 2
      ;;
    --draft)
      IS_DRAFT=true
      shift
      ;;
    --title)
      CUSTOM_TITLE="$2"
      shift 2
      ;;
    *)
      echo "❌ Unknown parameter: $1"
      echo "Usage: /zcf-pr [--base <branch>] [--draft] [--title <title>]"
      echo "Examples:"
      echo "  /zcf-pr                           # Create PR to main"
      echo "  /zcf-pr --base develop            # Create PR to develop"
      echo "  /zcf-pr --draft                   # Create draft PR"
      echo "  /zcf-pr --title 'Bug Fix'         # Custom title"
      exit 1
      ;;
  esac
done

echo "🚀 Creating PR from current branch to $BASE_BRANCH"
if [ "$IS_DRAFT" = true ]; then
  echo "📝 Creating as draft PR"
fi
if [ -n "$CUSTOM_TITLE" ]; then
  echo "📝 Custom title: $CUSTOM_TITLE"
fi

2. Check Working Directory Status

# Check if we're in a git repository
if [ ! -d ".git" ]; then
  echo "❌ Error: Not in a git repository"
  exit 1
fi

# Get current branch
CURRENT_BRANCH=$(git branch --show-current)
if [ -z "$CURRENT_BRANCH" ]; then
  echo "❌ Error: Could not determine current branch"
  exit 1
fi

# Check if current branch is same as base branch
if [ "$CURRENT_BRANCH" = "$BASE_BRANCH" ]; then
  echo "❌ Error: Cannot create PR from $BASE_BRANCH to $BASE_BRANCH"
  echo "Please switch to a feature branch first"
  exit 1
fi

# Check for uncommitted changes
if ! git diff --quiet || ! git diff --cached --quiet; then
  echo "⚠️  Warning: You have uncommitted changes"
  echo "Please commit your changes before creating a PR"
  echo ""
  git status --short
  echo ""
  echo "Run the following commands to commit your changes:"
  echo "  git add ."
  echo "  git commit -m 'Your commit message'"
  exit 1
fi

echo "✅ Branch status OK: $CURRENT_BRANCH"

3. Analyze Branch Changes

# Check if base branch exists
if ! git rev-parse --verify "$BASE_BRANCH" >/dev/null 2>&1; then
  echo "❌ Error: Base branch '$BASE_BRANCH' does not exist"
  exit 1
fi

# Get commit history since divergence
echo "📊 Analyzing changes from $BASE_BRANCH..."

# Find common ancestor
MERGE_BASE=$(git merge-base "$BASE_BRANCH" HEAD)
if [ -z "$MERGE_BASE" ]; then
  echo "❌ Error: Could not find common ancestor with $BASE_BRANCH"
  exit 1
fi

# Get commits since divergence
COMMITS=$(git log $MERGE_BASE..HEAD --oneline)
COMMIT_COUNT=$(echo "$COMMITS" | wc -l | tr -d ' ')

if [ "$COMMIT_COUNT" -eq 0 ]; then
  echo "❌ Error: No commits found since divergence from $BASE_BRANCH"
  exit 1
fi

echo "📝 Found $COMMIT_COUNT commit(s):"
echo "$COMMITS"
echo ""

# Analyze file changes
echo "📁 File change statistics:"
git diff --stat $MERGE_BASE..HEAD

# Get changed files
CHANGED_FILES=$(git diff --name-only $MERGE_BASE..HEAD)
echo ""
echo "📋 Changed files:"
echo "$CHANGED_FILES"

4. Categorize Changes

# Analyze changes to determine type and scope
echo ""
echo "🔍 Analyzing change categories..."

BUG_FIX=false
NEW_FEATURE=false
BREAKING_CHANGE=false
DOCUMENTATION=false
TESTS=false

# Analyze commits for change indicators
if echo "$COMMITS" | grep -E "(fix|bug|error|issue|problem)" >/dev/null; then
  BUG_FIX=true
fi

if echo "$COMMITS" | grep -E "(feat|add|new|create|implement)" >/dev/null; then
  NEW_FEATURE=true
fi

if echo "$COMMITS" | grep -E "(break|change|remove|delete|major)" >/dev/null; then
  BREAKING_CHANGE=true
fi

if echo "$CHANGED_FILES" | grep -E "\.(md|txt|rst)$" >/dev/null; then
  DOCUMENTATION=true
fi

if echo "$CHANGED_FILES" | grep -E "(test|spec)\." >/dev/null; then
  TESTS=true
fi

# Show analysis results
echo "📊 Change type analysis:"
if [ "$BUG_FIX" = true ]; then echo "  ✅ Bug fix detected"; fi
if [ "$NEW_FEATURE" = true ]; then echo "  ✅ New feature detected"; fi
if [ "$BREAKING_CHANGE" = true ]; then echo "  ✅ Breaking change detected"; fi
if [ "$DOCUMENTATION" = true ]; then echo "  ✅ Documentation update detected"; fi
if [ "$TESTS" = true ]; then echo "  ✅ Test updates detected"; fi

5. Generate PR Title

# Generate PR title
if [ -n "$CUSTOM_TITLE" ]; then
  PR_TITLE="$CUSTOM_TITLE"
else
  # Auto-generate title from first commit
  FIRST_COMMIT=$(echo "$COMMITS" | tail -1)

  # Clean up commit message for PR title
  if echo "$FIRST_COMMIT" | grep -E "^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: " >/dev/null; then
    # Use conventional commit format
    PR_TITLE=$(echo "$FIRST_COMMIT" | sed 's/^[a-f0-9]\+ //')
  else
    # Fallback to simple format
    PR_TITLE="$CURRENT_BRANCH"
  fi
fi

echo "📝 PR Title: $PR_TITLE"

6. Generate PR Description

# Generate comprehensive PR description
echo "📋 Generating PR description..."

# Generate change summary
CHANGE_SUMMARY=""
if [ "$BUG_FIX" = true ]; then
  CHANGE_SUMMARY="${CHANGE_SUMMARY}- Bug fixes and error handling improvements\n"
fi
if [ "$NEW_FEATURE" = true ]; then
  CHANGE_SUMMARY="${CHANGE_SUMMARY}- New features and functionality additions\n"
fi
if [ "$BREAKING_CHANGE" = true ]; then
  CHANGE_SUMMARY="${CHANGE_SUMMARY}- Breaking changes requiring attention\n"
fi
if [ "$DOCUMENTATION" = true ]; then
  CHANGE_SUMMARY="${CHANGE_SUMMARY}- Documentation updates and improvements\n"
fi
if [ "$TESTS" = true ]; then
  CHANGE_SUMMARY="${CHANGE_SUMMARY}- Test coverage and quality improvements\n"
fi

# Generate file change summary
FILE_CHANGES=""
for file in $CHANGED_FILES; do
  FILE_CHANGES="${FILE_CHANGES}- \`$file\`\n"
done

# Build complete PR description
PR_DESCRIPTION=$(cat <<EOF
## Description

This PR includes changes from branch \`$CURRENT_BRANCH\` with $COMMIT_COUNT commit(s) since divergence from \`$BASE_BRANCH\`.

### Key Changes:

$CHANGE_SUMMARY

### Files Modified:

$FILE_CHANGES

## Type of Change

EOF
)

# Add checkboxes based on analysis
if [ "$BUG_FIX" = true ]; then
  PR_DESCRIPTION="${PR_DESCRIPTION}- [x] Bug fix\n"
else
  PR_DESCRIPTION="${PR_DESCRIPTION}- [ ] Bug fix\n"
fi

if [ "$NEW_FEATURE" = true ]; then
  PR_DESCRIPTION="${PR_DESCRIPTION}- [x] New feature\n"
else
  PR_DESCRIPTION="${PR_DESCRIPTION}- [ ] New feature\n"
fi

if [ "$BREAKING_CHANGE" = true ]; then
  PR_DESCRIPTION="${PR_DESCRIPTION}- [x] Breaking change\n"
else
  PR_DESCRIPTION="${PR_DESCRIPTION}- [ ] Breaking change\n"
fi

if [ "$DOCUMENTATION" = true ]; then
  PR_DESCRIPTION="${PR_DESCRIPTION}- [x] Documentation update\n"
else
  PR_DESCRIPTION="${PR_DESCRIPTION}- [ ] Documentation update\n"
fi

# Add testing section
PR_DESCRIPTION="${PR_DESCRIPTION}
## Testing

- [x] Code changes tested
- [x] No new warnings introduced
- [x] Code follows style guidelines"

if [ "$TESTS" = true ]; then
  PR_DESCRIPTION="${PR_DESCRIPTION}\n- [x] Tests added/updated"
else
  PR_DESCRIPTION="${PR_DESCRIPTION}\n- [ ] Tests added/updated"
fi

# Add checklist
PR_DESCRIPTION="${PR_DESCRIPTION}
## Checklist

- [x] Self-review completed
- [x] Documentation updated (if applicable)
- [x] No new warnings introduced
- [x] Code follows project guidelines

## Additional Information

**Branch:** \`$CURRENT_BRANCH\` → \`$BASE_BRANCH\`
**Commits:** $COMMIT_COUNT
**Files Changed:** $(echo "$CHANGED_FILES" | wc -l | tr -d ' ')

### Commit History:

\`\`\`
$COMMITS
\`\`\`

---
🤖 Generated with /zcf-pr command
EOF

echo "✅ PR description generated"

7. Push Branch and Create PR

# Check if branch exists on remote
if ! git ls-remote --heads origin "$CURRENT_BRANCH" >/dev/null 2>&1; then
  echo "📤 Pushing branch to remote..."
  git push -u origin "$CURRENT_BRANCH"
else
  echo "📤 Branch already exists on remote, ensuring it's up to date..."
  git push origin "$CURRENT_BRANCH"
fi

# Create PR using gh CLI
echo "📋 Creating pull request..."

PR_OPTIONS="--title '$PR_TITLE' --body '$PR_DESCRIPTION'"

if [ "$IS_DRAFT" = true ]; then
  PR_OPTIONS="$PR_OPTIONS --draft"
fi

# Execute gh pr create command
PR_URL=$(eval "gh pr create --base $BASE_BRANCH $PR_OPTIONS")

if [ $? -eq 0 ]; then
  echo ""
  echo "✅ Pull request created successfully!"
  echo "🔗 PR URL: $PR_URL"
  echo ""
  echo "📋 PR Details:"
  echo "  Title: $PR_TITLE"
  echo "  From: $CURRENT_BRANCH"
  echo "  To: $BASE_BRANCH"
  echo "  Commits: $COMMIT_COUNT"
  echo "  Files: $(echo "$CHANGED_FILES" | wc -l | tr -d ' ')"
  echo ""
  echo "⚠️  Please review the PR and add any additional information as needed"
else
  echo "❌ Failed to create pull request"
  echo "Please check GitHub CLI authentication and permissions"
  exit 1
fi

Complete Workflow Summary

  1. Parameter Parsing: Parse base branch, draft mode, and custom title options
  2. Branch Validation: Check current branch status and ensure it's different from base branch
  3. Change Analysis: Analyze commits and file changes since divergence from base branch
  4. Categorization: Auto-detect change types (bug fix, feature, breaking change, docs, tests)
  5. Title Generation: Generate appropriate PR title or use custom title
  6. Description Generation: Create comprehensive PR description following project template
  7. Branch Push: Ensure branch is available on remote repository
  8. PR Creation: Create pull request using GitHub CLI with all details

Important Notes

⚠️ Prerequisites:

  • GitHub CLI (gh): Must be installed and authenticated
  • Clean working directory: All changes must be committed before PR creation
  • Remote branch: Current branch must be pushed to remote repository
  • Base branch: Target branch must exist and be accessible

Best Practices:

  • Ensure commit messages follow conventional commit format
  • Test all changes before creating PR
  • Review auto-generated PR description for accuracy
  • Add any additional context specific to your changes
  • Check that all tests pass in CI/CD pipeline

Change Detection Logic:

The command automatically categorizes changes based on:

  • Commit messages: Keywords like "feat", "fix", "break", "docs", "test"
  • File patterns: .md/.txt for docs, (test|spec)\. for tests
  • File extensions: TypeScript, JavaScript, JSON, etc.

Example Outputs:

# Standard PR to main
/zcf-pr
# → Creates PR: "feat: add new feature" with full description

# PR to develop branch
/zcf-pr --base develop
# → Creates PR to develop branch instead of main

# Draft PR
/zcf-pr --draft
# → Creates draft PR for initial review

# Custom title
/zcf-pr --title "Critical bug fix for authentication"
# → Uses custom title instead of auto-generated one

Now creating pull request...

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

bmad-init

무료

Install or update BMad-Method (V6) in a project after checking existing installations. The skill also fixes a known output-folder issue, updates Git ignore rules, and provides next steps for using the installed workflows.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Set up BMad-Method (V6) for Claude Code
  • Run a quick update on an existing V6 installation
  • Check for an older V4 installation before setup
UfoMiao/zcf6.1천2026년 8월 31일 업데이트

bmad-init

무료

Set up or update BMad-Method V6 in a project, detect older installations, fix a known output folder issue, and adjust Git ignore rules, with guidance on what to do next.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Installing BMad-Method V6 in a project
  • Updating an existing V6 installation
  • Checking for an older V4 installation
UfoMiao/zcf6.1천2026년 8월 31일 업데이트

feat

무료

Turn feature requests into documented plans, revise them through discussion, and carry out implementation with progress tracking. Frontend work includes checking for a UI design and arranging design work when needed.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Turning a feature idea into a development plan
  • Revising a plan after feedback
  • Implementing tasks from an agreed plan
UfoMiao/zcf6.1천2026년 8월 31일 업데이트

feat

무료

Guide new feature work from requirements and planning through revisions and implementation. Create Markdown plans with acceptance criteria, track progress, and ensure frontend tasks have a UI design before development begins.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Turn a feature idea into an implementation plan
  • Revise a plan based on feedback
  • Start implementation from an agreed plan
UfoMiao/zcf6.1천2026년 8월 31일 업데이트

Find Git branches that have been merged or inactive for a chosen period. Preview cleanup candidates, exclude protected branches, and delete local or remote branches using a selected base branch and confirmation options.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Find merged branches to clean up
  • Review branches with no recent commits
  • Clean up branches merged into a release
UfoMiao/zcf6.1천2026년 8월 31일 업데이트

Find merged or inactive Git branches, preview cleanup candidates, and delete selected branches after confirmation. Choose a comparison branch, protect important branches with configurable rules, and optionally include remote branches.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Previewing branch cleanup candidates
  • Removing branches already merged into a release branch
  • Finding branches with no recent commits
UfoMiao/zcf6.1천2026년 8월 31일 업데이트

UfoMiao의 스킬 모두 보기

이 스킬의 문제 신고