npx claudepluginhub nilpath/nilpath-marketplace --plugin claude-code-toolsWant just this skill?
Then install: npx claudepluginhub u/[userId]/[slug]
Stacked (dependent) pull request workflow. Use when creating, managing, or troubleshooting stacked PRs, or when user mentions stacked diffs, dependent PRs, PR stacks, or breaking large features into smaller PRs.
This skill is limited to using the following tools:
references/stacked-prs.mdscripts/stack-backup.shscripts/stack-rebase.shscripts/stack-status.shscripts/update-pr-targets.shtemplates/pr-description.mdworkflows/create-stacked-prs.mdworkflows/recover-from-rebase.mdworkflows/update-stack-after-merge.mdGit Stacked PRs
Expert guidance for creating and managing stacked (dependent) pull requests.
Current Git Context
- Current git status: !
git status - Staged changes: !
git diff --staged - Unstaged changes: !
git diff - Current branch: !
git branch --show-current - Recent commits on current branch: !
git log --oneline -10 - Branch tree: !
git log --oneline --graph --all -20
What Are Stacked PRs?
Stacked PRs (also called dependent PRs or stacked diffs) is a workflow where you create multiple pull requests that build on top of each other. Each PR in the stack depends on the changes from the previous PR.
Traditional workflow:
main → feature-branch (large PR, 2000+ lines)
Stacked workflow:
main → feature-part-1 → feature-part-2 → feature-part-3
(small PR) (small PR) (small PR)
200 lines 200 lines 200 lines
Benefits
- Faster reviews - Small PRs (< 400 lines) are easier and quicker to review
- Parallel work - Continue building while earlier PRs are in review
- Easier debugging - Smaller changes make issues easier to isolate
- Better collaboration - Team can review and merge incrementally
- Clearer history - Each PR represents a logical unit of work
When to Use Stacked PRs
✅ Good use cases:
- Large features that can be broken into logical increments
- Features with clear dependency chains
- Projects with active code reviews
- Teams practicing continuous integration
❌ Avoid when:
- Feature is already small (< 400 lines)
- Changes are tightly coupled and can't be separated
- Working alone without code review
- Deadlines are extremely tight
Quick Start Workflows
Create Stacked PRs from Scratch
See workflows/create-stacked-prs.md for step-by-step instructions on organizing unstaged changes into a reviewable stack.
Quick overview:
- Plan your stack structure
- Create base branch from main
- Stage and commit related changes
- Create PR targeting main
- Create next branch from base
- Repeat for each layer
- Update PR targets to form stack
Update Stack After Merge
See workflows/update-stack-after-merge.md for instructions on rebasing and updating PR targets after merging base PRs.
Quick overview:
- Checkout the branch above merged PR
- Rebase onto new base (usually main)
- Force push with lease
- Update PR target if needed
- Repeat for each remaining branch in stack
Recover from Rebase Mistakes
See workflows/recover-from-rebase.md for instructions on using reflog to recover from rebase errors.
Quick overview:
- Find previous HEAD with
git reflog - Reset to previous state
- Retry rebase with correct base
Best Practices
Planning Your Stack
Plan before you start:
- Identify logical boundaries in your feature
- Ensure each layer can work independently
- Keep each PR < 400 lines
- Define clear dependencies
Example stack plan:
feat/auth/base - Core auth models and utilities
feat/auth/middleware - Auth middleware (depends on base)
feat/auth/endpoints - API endpoints (depends on middleware)
feat/auth/ui - Frontend UI (depends on endpoints)
Branch Naming
Use consistent naming that shows hierarchy:
feat/<stack-name>/<component>
fix/<stack-name>/<component>
refactor/<stack-name>/<component>
Examples:
feat/auth/basefeat/auth/middlewarefeat/payments/stripe-integrationfeat/payments/payment-ui
Testing Requirements
Each PR in the stack must:
- Have its own tests
- Pass all existing tests
- Be independently testable
- Not break functionality
Example test strategy:
PR 1 (base): Tests for models and utilities
PR 2 (middleware): Tests for middleware + integration tests
PR 3 (endpoints): Tests for endpoints + E2E tests
PR 4 (ui): UI tests + full E2E flow tests
PR Descriptions
Use clear PR descriptions that document dependencies:
## Summary
Adds JWT authentication middleware for protecting routes.
## Stack Information
- **Stack:** User Authentication
- **Position:** 2/4 (depends on #123, required by #125)
- **Base PR:** #123 (Core auth models)
- **Depends on:** #123
## Changes
- Authentication middleware
- Token validation logic
- Protected route decorators
## Testing
- Unit tests for middleware
- Integration tests with routes
- All tests pass
## Review Notes
This PR can be reviewed independently, but depends on #123 being merged first.
See templates/pr-description.md for a reusable template.
Automated Operations
The git-stacked-prs skill includes scripts to automate common workflows:
Rebase Entire Stack
Automatically rebase all branches in a stack with safety features:
${CLAUDE_PLUGIN_ROOT}/skills/git-stacked-prs/scripts/stack-rebase.sh main feat/auth-base feat/auth-middleware feat/auth-api
Features:
- Creates automatic backups before rebasing
- Updates base branch from remote
- Rebases each branch sequentially
- Runs tests after each rebase
- Uses
--force-with-leasefor safety - Supports
--dry-runfor preview
View Stack Status
Display visual tree of stack structure with PR status:
${CLAUDE_PLUGIN_ROOT}/skills/git-stacked-prs/scripts/stack-status.sh --pr-status
Options:
--detail- Show commit summaries--pr-status- Include GitHub PR status (requiresghCLI)--json- JSON output for parsing
Update PR Targets After Merge
Batch update PR base branches after merging a base PR:
${CLAUDE_PLUGIN_ROOT}/skills/git-stacked-prs/scripts/update-pr-targets.sh feat/auth-base main
Features:
- Auto-detects dependent PRs
- Rebases branches onto new target
- Updates PR targets via
ghCLI - Handles conflicts gracefully
- Supports
--no-rebaseto only update targets
Backup and Restore Stack
Create backups before risky operations:
# Create backups
${CLAUDE_PLUGIN_ROOT}/skills/git-stacked-prs/scripts/stack-backup.sh create feat/auth-base feat/auth-middleware
# List backups
${CLAUDE_PLUGIN_ROOT}/skills/git-stacked-prs/scripts/stack-backup.sh list
# Restore from backup
${CLAUDE_PLUGIN_ROOT}/skills/git-stacked-prs/scripts/stack-backup.sh restore feat/auth-base
# Clean old backups
${CLAUDE_PLUGIN_ROOT}/skills/git-stacked-prs/scripts/stack-backup.sh clean --older-than 30
Common Operations
View Stack Structure
# Visual branch tree
git log --oneline --graph --all -20
# See what branches exist
git branch -a
# Compare branches
git log main..feat/auth/base --oneline
git log feat/auth/base..feat/auth/middleware --oneline
# Or use the automated script
${CLAUDE_PLUGIN_ROOT}/skills/git-stacked-prs/scripts/stack-status.sh
Rebase a Stack
Use the automated script for safe, sequential rebasing:
${CLAUDE_PLUGIN_ROOT}/skills/git-stacked-prs/scripts/stack-rebase.sh main feat/auth/base feat/auth/middleware feat/auth/api
Or manually rebase each branch:
# Update base branch
git checkout feat/auth/base
git rebase main
git push --force-with-lease
# Update next branch
git checkout feat/auth/middleware
git rebase feat/auth/base
git push --force-with-lease
# Repeat for each branch
Handle Merge Conflicts During Rebase
# During rebase, conflicts occur
git status # Identify conflicted files
# Edit files to resolve conflicts
# Remove conflict markers: <<<<<<<, =======, >>>>>>>
git add <resolved-files> # Stage resolved files
git rebase --continue # Continue rebase
# If things go wrong
git rebase --abort # Abort and start over
git reflog # Find previous HEAD to recover
Change PR Targets
After merging a base PR, update the next PR's target:
- Go to GitHub PR page
- Click "Edit" next to the base branch
- Change target from merged branch to new base (usually main)
- GitHub will update the diff automatically
Troubleshooting
Stack Got Out of Sync
Symptoms: Commits appearing in wrong PRs, conflicts everywhere
Solution:
- List all branches in stack
- Rebase each branch in order from bottom to top
- Force push each branch after rebase
- Verify PR diffs on GitHub
Lost Commits During Rebase
Solution: Use reflog to recover (see workflows/recover-from-rebase.md)
git reflog # Find lost commit
git cherry-pick <commit> # Apply lost commit
Merge Conflicts in Multiple Layers
Solution: Resolve conflicts layer by layer, starting from base:
- Rebase and fix conflicts in base branch
- Rebase and fix conflicts in next branch (may be fewer conflicts now)
- Continue up the stack
PR Shows Too Many Commits
Symptom: PR includes commits from base branch that are already merged
Solution: Update PR target to point to main instead of the merged branch:
- Edit PR base branch on GitHub
- Change from merged branch to main
- Diff will update automatically
Tools and Automation
Git Aliases
Add to ~/.gitconfig:
[alias]
stack-status = log --oneline --graph --all -20
stack-rebase = "!f() { git rebase $1 && git push --force-with-lease; }; f"
GitHub CLI
# View PR status
gh pr status
# View specific PR
gh pr view 123
# Check PR checks/tests
gh pr checks 123
References
- Complete guide - Comprehensive stacked PR workflow documentation
- Create workflow - Step-by-step stack creation
- Update workflow - Update stack after merges
- Recovery workflow - Recover from rebase mistakes
- PR template - Stacked PR description template
Related Skills
- For commit message guidelines, see
@git-commits - For rebase and conflict resolution details, see
@git-advanced
Key Takeaways
- Plan your stack before starting - identify logical boundaries
- Keep PRs small (< 400 lines) for faster reviews
- Test each layer independently
- Document dependencies in PR descriptions
- Rebase frequently to avoid conflicts
- Use --force-with-lease instead of --force for safety
- Update PR targets after merging base PRs
Similar Skills
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use for discovering, retrieving, and improving prompts.
Search, retrieve, and install Agent Skills from the prompts.chat registry using MCP tools. Use when the user asks to find skills, browse skill catalogs, install a skill for Claude, or extend Claude's capabilities with reusable AI agent components.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.