Claude-skill-registry git-worktrees
Use when working on multiple features simultaneously. Creates isolated workspaces without branch switching, enabling parallel development.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/git-worktrees-liauw-media-codeassist" ~/.claude/skills/majiayu000-claude-skill-registry-git-worktrees-1f2014 && rm -rf "$T"
skills/data/git-worktrees-liauw-media-codeassist/SKILL.mdGit 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:
- Run multiple agents in different worktreesdispatching-parallel-agents
- Standard git practices apply in each worktreegit-workflow
- Execute different plans in parallelexecuting-plans
- Review PRs in separate worktreescode-review
Workflow:
- Create worktree for feature:
git worktree add - Work on feature: Use
,brainstorming
,writing-plansexecuting-plans - Test in worktree: Use
for each worktreedatabase-backup - 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.