Git Spice Skill
This skill helps you manage stacked Git branches using git-spice (gs), a CLI tool for creating, navigating, and submitting branch stacks as pull requests.
When to Use This Skill
Use this skill when the user wants to:
- •Create a new feature branch ("create a branch", "new branch called X")
- •Switch to another branch ("switch branch", "checkout branch")
- •Update a branch with latest main ("rebase my branch", "update from main")
- •Create a pull request ("create PR", "submit PR", "open pull request")
- •Manage multiple related changes ("I have several related changes")
- •Work with stacked branches for large features broken into reviewable chunks
- •Navigate up/down through branch stacks
- •Submit multiple related PRs as a stack
- •Manage branch dependencies and PR chains on GitHub/GitLab
Core Concepts
Stacked Branches: A series of branches where each branch is based on the previous one, forming a dependency chain rooted at trunk (main/master).
┌── feat3 (#3) <- top of stack ┌─┴ feat2 (#2) ┌─┴ feat1 (#1) <- bottom of stack main <- trunk
Trunk: The main development branch (main, master, or configured trunk).
Upstack/Downstack: Branches above/below the current branch in the stack.
Quick Start
1. Initialize Repository
gs repo init
This sets up git-spice tracking in your repository. You'll be prompted to select the trunk branch and remote.
2. Create a Branch Stack
# Start from trunk git checkout main # Create first branch in stack gs branch create feat1 -m "Add user model" # Create second branch stacked on feat1 gs branch create feat2 -m "Add user API" # Create third branch stacked on feat2 gs branch create feat3 -m "Add user tests"
3. Navigate the Stack
gs up # Move up one branch (u) gs down # Move down one branch (d) gs top # Jump to top of stack (U) gs bottom # Jump to bottom of stack (D) gs trunk # Return to trunk branch
4. View Your Stack
gs log short # List all tracked branches (ls) gs log long # Show branches with commits (ll)
5. Submit PRs
gs stack submit # Submit entire stack as PRs (ss) gs branch submit # Submit current branch only (bs) gs upstack submit # Submit current and all above (uss) gs downstack submit # Submit current and all below (dss)
6. Sync and Restack
gs repo sync # Pull latest, delete merged branches (rs) gs stack restack # Rebase all branches onto latest (sr)
Command Reference (Shorthands)
| Command | Shorthand | Description |
|---|---|---|
gs branch create | gs bc | Create new branch |
gs branch checkout | gs bco | Switch to branch |
gs branch submit | gs bs | Submit branch as PR |
gs branch restack | gs br | Rebase branch on base |
gs branch delete | gs bd | Delete branch |
gs branch onto | gs bon | Move branch onto another |
gs branch edit | gs be | Interactive rebase |
gs stack submit | gs ss | Submit entire stack |
gs stack restack | gs sr | Restack entire stack |
gs upstack submit | gs uss | Submit upstack |
gs upstack restack | gs usr | Restack upstack |
gs downstack submit | gs dss | Submit downstack |
gs repo sync | gs rs | Sync with remote |
gs repo init | gs ri | Initialize repo |
gs commit create | gs cc | Create commit |
gs commit amend | gs ca | Amend commit |
gs log short | gs ls | List branches |
gs log long | gs ll | List with commits |
Common Workflows
Creating a Feature Stack
# Start from updated trunk gs trunk git pull # Create logical branches for each reviewable piece gs bc api-models -m "Add data models for new API" gs bc api-handlers -m "Implement API handlers" gs bc api-tests -m "Add API integration tests" # View your stack gs ll
Updating After Review Feedback
# Navigate to branch that needs changes gs bco api-handlers # Make changes, then amend or create new commit gs ca # amend current commit # or gs cc -m "Address review feedback" # Restack all branches above to incorporate changes gs usr # upstack restack
Syncing with Upstream Changes
# Sync repo - pulls trunk, deletes merged branches gs rs # Restack all tracked branches onto new trunk gs repo restack # or for just current stack: gs sr
Moving a Branch
# Move current branch onto a different base gs bon main # Move onto main directly gs bon other-feature # Move onto another branch # Insert a new branch in the middle of a stack gs bc new-branch --insert # Restacks upstack onto new branch
Handling Conflicts
When restacking encounters conflicts:
# Resolve conflicts in your editor git status # See conflicted files # ... fix conflicts ... git add <resolved-files> # Continue the restack operation gs rebase continue # (gs rbc) # Or abort if needed gs rebase abort # (gs rba)
Submitting PRs
# Submit all branches in stack as linked PRs gs ss # Submit with draft PRs gs ss --draft # Submit only current branch gs bs # Update PR after changes gs bs # Re-run submit updates existing PR
Branch Operations
Track Existing Branches
# Track a single branch gs branch track feature-branch --base main # Track all branches in a downstack gs downstack track
Split and Squash
# Split current branch into multiple commits gs branch split # Squash branch into single commit gs branch squash
Delete Branches
# Delete a single branch gs bd feature-branch # Delete entire upstack gs upstack delete # Delete entire stack gs stack delete
Authentication
gs auth login # Authenticate with GitHub/GitLab gs auth status # Check current auth status gs auth logout # Clear credentials
Configuration
Git-spice uses git config for settings:
# Set branch name prefix git config spice.branchCreate.prefix "username/" # Configure navigation comment style git config spice.submit.navigationComment multiple # View all spice config git config --get-regexp spice
Troubleshooting
Branch Not Tracked
# Track an existing branch gs branch track my-branch --base main
Rebase Conflicts
# After resolving conflicts gs rebase continue # To abort and try different approach gs rebase abort
Out of Sync with Remote
gs repo sync # Fetch and sync gs repo restack # Restack all branches
Force Push After Restack
After restacking, branches need force push:
gs bs --force # Submit handles force push # or manually: git push --force-with-lease
Reference Documentation
For detailed information on specific topics, see:
- •Command Reference - Complete command documentation
- •Workflows - Advanced workflow patterns
Key Principles
- •Atomic branches: Each branch should be one logical, reviewable change
- •Stack from trunk: Build stacks starting from main/master
- •Restack often: Keep branches rebased on latest changes
- •Submit together: Use
gs ssto create linked PRs - •Sync regularly: Use
gs rsto stay current with upstream