Best for
- Expert guidance for branch management, pull request workflows, and GitHub integration using modern Git commands and linear history practices.
laurigates/claude-plugins/git-plugin/skills/git-branch-pr-workflow/SKILL.md
Branch management and PR workflows — git switch/restore, GitHub MCP. Use when creating branches, opening PRs, or working with feature branches.
Decision brief
Branch management and PR workflows — git switch/restore, GitHub MCP.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/laurigates/claude-plugins --skill "git-plugin/skills/git-branch-pr-workflow"Inspect the Agent Skill "git-branch-pr-workflow" from https://github.com/laurigates/claude-plugins/blob/c056e44b978db58648ad20440dc1515cb09af09d/git-plugin/skills/git-branch-pr-workflow/SKILL.md at commit c056e44b978db58648ad20440dc1515cb09af09d. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Review the “Basic Workflow” section in the pinned source before continuing.
When you have commits for multiple PRs on main, push specific commit ranges to different remote branches:
Preferred: Main-branch development (see above) - no local feature branches needed.
Clean up commits before sharing:
Review the “Daily Integration Workflow” section in the pinned source before continuing.
Permission review
The documentation asks the agent to run terminal commands or scripts.
git switch mainThe documentation asks the agent to run terminal commands or scripts.
git pull origin mainEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 91/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 54 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
| Use this skill when... | Use the alternative when... |
|---|---|
| Designing the overall branch + PR workflow (main-branch dev, MCP integration) | Use git-branch-naming to pick or audit a single branch name |
Choosing between git switch, git restore, and feature-branch push patterns | Use git-rebase-patterns for linear-history cleanup and stacked PRs |
Creating PRs through GitHub MCP tools rather than gh pr create | Use git-pr to create PRs from a pushed branch via the gh CLI |
| Coordinating commit -> push -> PR end-to-end | Use git-commit-push-pr for the consolidated commit+push+PR macro |
Expert guidance for branch management, pull request workflows, and GitHub integration using modern Git commands and linear history practices.
git switch and git restore instead of checkoutDevelop directly on main, push to remote feature branches for PRs. This eliminates local branch management overhead.
# All work happens on main
git switch main
git pull origin main
# Make changes, commit on main
git add file.ts
git commit -m "feat(auth): add OAuth2 support"
# Push to remote feature branch (creates PR target)
git push origin main:feat/auth-oauth2
# Create PR using GitHub MCP (head: feat/auth-oauth2, base: main)
When you have commits for multiple PRs on main, push specific commit ranges to different remote branches:
# Commits on main:
# abc1234 feat(auth): add OAuth2 support <- PR #1
# def5678 feat(auth): add token refresh <- PR #1
# ghi9012 fix(api): handle timeout edge case <- PR #2
# Push first 2 commits to auth feature branch
git push origin abc1234^..def5678:feat/auth-oauth2
# Push remaining commit to fix branch
git push origin ghi9012^..ghi9012:fix/api-timeout
# Alternative: push from a specific commit to HEAD
git push origin def5678..HEAD:fix/api-timeout
Commit range patterns:
git push origin <start>^..<end>:<remote-branch> - Push commit range (inclusive)git push origin <commit>..<commit>:<remote-branch> - Push range (exclusive start)git push origin <commit>..HEAD:<remote-branch> - Push from commit to current HEADgit push origin main:<remote-branch> - Push entire main to remote branchModern Git uses specialized commands instead of multi-purpose git checkout:
# Branch switching - NEW WAY (Git 2.23+)
git switch feature-branch # vs git checkout feature-branch
git switch -c new-feature # vs git checkout -b new-feature
git switch - # vs git checkout -
# Creating branches with tracking
git switch -c feature --track origin/feature
git switch -C force-recreate-branch
File restoration is now handled by git restore:
# Unstaging files - NEW WAY
git restore --staged file.txt # vs git reset HEAD file.txt
git restore --staged . # vs git reset HEAD .
# Discarding changes - NEW WAY
git restore file.txt # vs git checkout -- file.txt
git restore . # vs git checkout -- .
# Restore from specific commit
git restore --source=HEAD~2 file.txt # vs git checkout HEAD~2 -- file.txt
git restore --source=main --staged . # vs git reset main .
| Legacy Command | Modern Alternative | Purpose |
|---|---|---|
git checkout branch | git switch branch | Switch branches |
git checkout -b new | git switch -c new | Create & switch |
git checkout -- file | git restore file | Discard changes |
git reset HEAD file | git restore --staged file | Unstage file |
git checkout HEAD~1 -- file | git restore --source=HEAD~1 file | Restore from commit |
For comprehensive branch naming conventions including type prefixes, issue linking, and validation patterns, see git-branch-naming.
Quick reference: {type}/{issue}-{description} (e.g., feat/123-user-auth)
Preferred: Main-branch development (see above) - no local feature branches needed.
Alternative: Local feature branches for complex multi-day work:
# Feature branch lifecycle (max 2 days)
git switch main
git pull origin main
git switch -c feat/user-auth
# Daily rebase to stay current
git switch main && git pull
git switch feat/user-auth
git rebase main
# Interactive cleanup before PR
git rebase -i main
# Squash, fixup, reword commits for clean history
# Push and create PR
git push -u origin feat/user-auth
Use local branches only when:
Maintain linear main branch history:
# Manual squash merge
git switch main
git merge --squash feat/user-auth
git commit -m "feat: add user authentication system
- Implement JWT token validation
- Add login/logout endpoints
- Create user session management
Closes #123"
Clean up commits before sharing:
# Rebase last 3 commits
git rebase -i HEAD~3
# Common rebase commands:
# pick = use commit as-is
# squash = combine with previous commit
# fixup = squash without editing message
# reword = change commit message
# drop = remove commit entirely
# Example rebase todo list:
pick a1b2c3d feat: add login form
fixup d4e5f6g fix typo in login form
squash g7h8i9j add form validation
reword j1k2l3m implement JWT tokens
For advanced rebase techniques including --reapply-cherry-picks, --update-refs, --onto, stacked PR workflows, and combining flags, see git-rebase-patterns.
Use GitHub MCP tools for all GitHub operations:
# Get repository information
mcp__github__get_me() # Get authenticated user info
# List and create PRs
mcp__github__list_pull_requests(owner="owner", repo="repo")
mcp__github__create_pull_request(
owner="owner",
repo="repo",
title="feat: add authentication",
head="feat/auth",
base="main",
body="## Summary\n- JWT authentication\n- OAuth support\n\nCloses #123"
)
# Update PRs
mcp__github__update_pull_request(
owner="owner",
repo="repo",
pullNumber=42,
title="Updated title",
state="open"
)
# List and create issues
mcp__github__list_issues(owner="owner", repo="repo")
# Start of day: sync with main
git switch main
git pull origin main
git switch feat/current-work
git rebase main
# End of day: push progress
git add . && git commit -m "wip: daily progress checkpoint"
git push origin feat/current-work
# Before PR: clean up history
git rebase -i main
git push --force-with-lease origin feat/current-work
# When rebase conflicts occur
git rebase main
# Fix conflicts in editor
git add resolved-file.txt
git rebase --continue
# If rebase gets messy, abort and merge instead
git rebase --abort
git merge main
# Always use --force-with-lease to prevent overwriting others' work
git push --force-with-lease origin feat/branch-name
# Never force push to main/shared branches
# Use this alias for safety:
git config alias.pushf 'push --force-with-lease'
Configure branch rules for linear history via GitHub MCP:
# Require linear history (disable merge commits)
# Configure via GitHub settings or MCP tools
# - Require pull request reviews
# - Require status checks to pass
# - Enforce linear history (squash merge only)
CRITICAL: When comparing branches for PR creation, always compare against origin/main (or origin/<base-branch>), never local main. Local main may contain commits that haven't been merged to the remote, causing PRs to include unrelated changes.
# WRONG: compares against local main (may include unpushed commits)
git log main..HEAD --format='%s'
git diff main...HEAD --stat
# CORRECT: compares against remote main (matches what GitHub will show)
git fetch origin main
git log origin/main..HEAD --format='%s'
git diff origin/main...HEAD --stat
Common scenario: You commit changes on local main for one PR, push to a feature branch, then start working on a second PR. If you compare against local main, the second PR's diff looks correct. But if the first PR hasn't merged yet, origin/main is behind — and comparing against it reveals that both PRs' changes would be included.
git fetch origin mainorigin/main in all diff/log commands for PR contextorigin/main when creating branches: git switch -c feat/foo origin/mainpr-context.sh script handles this automaticallyBefore creating a PR, gather all context in one command:
# Gather PR context (defaults to main as base, compares against origin/main)
bash "${CLAUDE_PLUGIN_ROOT}/skills/git-branch-pr-workflow/scripts/pr-context.sh"
# Specify different base branch (compares against origin/develop)
bash "${CLAUDE_PLUGIN_ROOT}/skills/git-branch-pr-workflow/scripts/pr-context.sh" develop
The script fetches the latest remote state and compares against origin/<base> to ensure accurate PR context. Outputs: branch info, remote status, commit range and types, diff stats, issue references found in commits, existing PR detection, and CI check results. Use this output to compose the PR title and body. See scripts/pr-context.sh for details.
Use conventional commit format in PR titles:
feat: add user authenticationfix: resolve login validation bugdocs: update API documentationchore: update dependencies## Summary
Brief description of changes
## Changes
- Bullet points of key changes
- Link related work
## Testing
How changes were tested
## Issue References
<!-- Use GitHub autolink format - ALWAYS include relevant issues -->
Closes #123
<!-- Or use: Fixes #N, Resolves #N, Refs #N -->
Issue Reference Guidelines:
Closes #N / Fixes #N / Resolves #N to auto-close issues on mergeRefs #N / Related to #N for context without auto-closingFixes owner/repo#NFixes #1, fixes #2, fixes #3 (repeat keyword)Closes #123, Fixes #456, Resolves #789Refs #234, Related to #567Fixes owner/repo#123Fixes #1, fixes #2 (repeat keyword for each)For troubleshooting (branch diverged, committed-to-main expected workflow, complex rebase conflicts), safe-operation guidance (recognising normal states, confirmation-required commands), and recovery workflows (pre-commit modifies files, push rejected, commit fails), see REFERENCE.md.
Frequently asked questions
Branch management and PR workflows — git switch/restore, GitHub MCP.
The source record exposes this install command: npx skills add https://github.com/laurigates/claude-plugins --skill "git-plugin/skills/git-branch-pr-workflow". Inspect the command and pinned source before running it.
Static rules flagged exec-script in the source; the page lists the matching lines and excerpts.
Alternatives
garrytan/gbrain
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
wanshuiyin/Auto-claude-code-research-in-sleep
Use it for operations and research tasks; the detail page covers purpose, installation, and practical steps.
prowler-cloud/prowler
PostgreSQL indexing best practices for Prowler: index design, partial indexes, partitioned table indexing, EXPLAIN ANALYZE validation, concurrent operations, monitoring, and maintenance. Trigger: When creating or modifying PostgreSQL indexes, analyzing query performance with EXPLAIN, debugging slow queries, reviewing index usage statistics, reindexing, dropping indexes, or working with partitioned table indexes. Also trigger when discussing index strategies, partial indexes, or index maintenance