name: git-worktrees description: "Use when working on multiple features simultaneously. Creates isolated workspaces without branch switching, enabling parallel development."
Git Worktrees
Core Principle
Work on multiple features in parallel using git worktrees instead of constantly switching branches.
When to Use This Skill
- Working on multiple features simultaneously
- Need to quickly switch context without stashing
- Want to run tests on one branch while working on another
- Comparing implementations across branches
- Client requests urgent fix while working on feature
What Are Git Worktrees?
Git worktrees allow you to have multiple working directories for the same repository, each checked out to a different branch.
Traditional way:
git checkout feature-a
[work on feature-a]
git stash
git checkout feature-b
[work on feature-b]
git stash
git checkout feature-a
git stash pop
With worktrees:
# Both branches available simultaneously in different directories
cd ../project-feature-a # Work on feature-a
cd ../project-feature-b # Work on feature-b
cd ../project-hotfix # Work on hotfix
Benefits
✅ No stashing: Changes stay in their worktree
✅ Parallel work: Different features in different terminals
✅ Independent testing: Test one branch while coding another
✅ Quick context switching: Just cd to different directory
✅ Clean state: Each worktree is independent
Git Worktree Basics
Creating a Worktree
# Basic syntax
git worktree add <path> <branch>
# Create worktree for existing branch
git worktree add ../project-feature-x feature/feature-x
# Create worktree with new branch
git worktree add -b feature/new-feature ../project-new-feature main
# Create worktree from specific branch
git worktree add ../project-hotfix -b hotfix/security-patch main
Listing Worktrees
# List all worktrees
git worktree list
# Output example:
# /path/to/project abc123 [main]
# /path/to/project-auth def456 [feature/authentication]
# /path/to/project-api ghi789 [feature/api-refactor]
Removing a Worktree
# After finishing work and merging the branch
git worktree remove ../project-feature-x
# Or if directory is already deleted
git worktree prune
Moving Between Worktrees
# Just use cd
cd ../project-auth # Work on authentication
cd ../project-api # Work on API
cd ../project # Back to main worktree
Worktree Workflow Examples
Example 1: Parallel Feature Development
Scenario: Working on authentication (long-term) and need to add quick bug fix
# Setup main project
cd ~/projects/myapp
git checkout main
# Create worktree for authentication feature
git worktree add -b feature/authentication ../myapp-auth main
# Start working on authentication
cd ../myapp-auth
[make changes, run tests, commit]
# Client reports urgent bug while you're working
# No need to stash! Just create worktree for fix
cd ~/projects/myapp
git worktree add -b fix/urgent-bug ../myapp-bugfix main
# Fix the bug in separate worktree
cd ../myapp-bugfix
[fix bug, test, commit, push]
# Create PR for bug fix
gh pr create --title "fix: resolve urgent bug"
# Bug fix merged, clean up
git worktree remove ../myapp-bugfix
# Continue working on authentication without interruption
cd ../myapp-auth
[continue work...]
Example 2: Testing Across Branches
Scenario: Need to compare behavior between main and your feature branch
# Main worktree
cd ~/projects/myapp # On main branch
# Feature worktree
git worktree add -b feature/new-api ../myapp-feature main
cd ../myapp-feature
[implement feature]
# Test your feature
./scripts/safe-test.sh npm test
# Compare with main branch behavior
cd ~/projects/myapp # Main branch
./scripts/safe-test.sh npm test
# Run both simultaneously in different terminals
# Terminal 1: cd ~/projects/myapp && npm run dev
# Terminal 2: cd ../myapp-feature && npm run dev
# Compare on different ports
Example 3: Code Review Workflow
Scenario: Reviewing a PR while working on your own feature
# Your work in progress
cd ~/projects/myapp-my-feature
[your work...]
# Colleague asks for code review on their PR
cd ~/projects/myapp
git fetch origin
git worktree add ../myapp-review-pr123 pr-123
# Review the code
cd ../myapp-review-pr123
[review code, run tests, check functionality]
# Add review comments
gh pr review 123 --comment -b "LGTM! Tested locally, works great."
# Clean up review worktree
cd ~/projects/myapp
git worktree remove ../myapp-review-pr123
# Back to your work without any disruption
cd ../myapp-my-feature
[continue working...]
Worktree Organization Strategies
Strategy 1: Sibling Directories
~/projects/
├── myapp/ # Main worktree (main branch)
├── myapp-auth/ # feature/authentication
├── myapp-api/ # feature/api-refactor
└── myapp-bugfix/ # fix/login-error
Pros: Easy to see all worktrees, simple paths Cons: Clutters parent directory
Strategy 2: Subdirectory Organization
~/projects/myapp/
├── .git/ # Main repo
├── main/ # Main branch worktree
├── worktrees/
│ ├── auth/ # feature/authentication
│ ├── api/ # feature/api-refactor
│ └── bugfix/ # fix/login-error
Pros: Organized, all in one place Cons: Slightly longer paths
Strategy 3: Feature-Based Structure
~/projects/myapp/
├── .git/
├── production/ # main branch
├── staging/ # staging branch
├── features/
│ ├── authentication/
│ ├── api-refactor/
│ └── user-profile/
└── fixes/
├── login-error/
└── memory-leak/
Pros: Very organized, clear purpose Cons: More complex setup
Worktree Best Practices
DO:
✅ Name worktree directories clearly (match branch name)
✅ Remove worktrees after branch is merged
✅ Run git worktree prune periodically
✅ Use worktrees for truly parallel work
✅ Keep worktrees in predictable locations
DON'T:
❌ Create too many worktrees (keep it manageable) ❌ Leave stale worktrees around after branches merged ❌ Use worktrees for trivial branch switches ❌ Forget which worktree you're in (use git prompt)
Worktree Cleanup
Removing Merged Worktrees
# After feature is merged, remove worktree
git worktree remove ../myapp-feature
# Delete the merged branch
git branch -d feature/feature-name
# Prune any stale worktree references
git worktree prune
Finding Stale Worktrees
# List all worktrees
git worktree list
# Check which branches are merged
git branch --merged
# Remove worktrees for merged branches
for worktree in $(git worktree list --porcelain | grep worktree | cut -d' ' -f2); do
cd $worktree
branch=$(git branch --show-current)
if git branch --merged main | grep -q "$branch"; then
echo "Removing merged worktree: $worktree"
git worktree remove $worktree
fi
done
Integration with Skills
Use with:
dispatching-parallel-agents- Run multiple agents in different worktreesgit-workflow- Standard git practices apply in each worktreeexecuting-plans- Execute different plans in parallelcode-review- Review PRs in separate worktrees
Workflow:
- Create worktree for feature:
git worktree add - Work on feature: Use
brainstorming,writing-plans,executing-plans - Test in worktree: Use
database-backupfor each worktree - Review in main worktree: Compare implementations
- Merge and cleanup: Remove worktree
Common Issues and Solutions
Issue 1: Worktree Creation Fails
Error: fatal: 'path' already exists
Solution:
# Remove the directory first
rm -rf ../myapp-feature
git worktree add ../myapp-feature feature/feature-name
# Or use a different path
git worktree add ../myapp-feature-v2 feature/feature-name
Issue 2: Branch Checked Out in Another Worktree
Error: fatal: 'branch' is already checked out at 'path'
Solution:
# A branch can only be checked out in one worktree at a time
# Either:
# 1. Remove the existing worktree
git worktree remove path/to/existing/worktree
# 2. Or create with different branch name
git worktree add -b feature/feature-name-v2 ../myapp-feature feature/feature-name
Issue 3: Forgot Which Worktree You're In
Solution:
# Show current worktree path
pwd
# Show current branch
git branch --show-current
# Add to shell prompt (add to .bashrc or .zshrc)
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
PS1="\w \$(parse_git_branch) $ "
Issue 4: Stale Worktree References
Error: Worktree listed but directory doesn't exist
Solution:
# Prune stale references
git worktree prune -v
# Force remove if needed
git worktree remove --force path/to/worktree
Advanced Worktree Usage
Worktrees for CI/CD Testing
# Create worktree for CI testing
git worktree add ../myapp-ci-test feature/feature-name
# Run CI tests in isolation
cd ../myapp-ci-test
./scripts/safe-test.sh npm run ci-test
# Clean up
cd -
git worktree remove ../myapp-ci-test
Worktrees for Deployment Branches
# Keep production and staging as worktrees
git worktree add ../myapp-production production
git worktree add ../myapp-staging staging
# Deploy from dedicated worktrees
cd ../myapp-production
git pull origin production
[run deployment script]
cd ../myapp-staging
git pull origin staging
[run staging deployment]
Worktree Checklist
Before creating worktree:
- Do I really need parallel work? (worktrees add complexity)
- Have I chosen a clear, descriptive path?
- Is the base branch correct?
While working in worktree:
- Am I aware which worktree I'm in?
- Have I committed changes regularly?
- Am I using proper git workflow in this worktree?
After finishing work:
- Has the branch been merged?
- Have I removed the worktree?
- Have I deleted the merged branch?
- Have I run
git worktree prune?
Authority
This skill is based on:
- Git worktrees feature (since Git 2.5)
- Professional development: Parallel work is common
- Efficiency: Context switching is expensive
- Best practices from the Superpowers framework
Social Proof: Many professional developers use worktrees for parallel feature development.
Your Commitment
Before using worktrees:
- I understand worktrees allow parallel work
- I will keep worktrees organized
- I will clean up merged worktrees
- I will not overuse worktrees (only when needed)
Bottom Line: Worktrees enable true parallel development. Use them when you need to work on multiple features simultaneously without constant branch switching. Clean up when done.