install
source · Clone the upstream repo
git clone https://github.com/MacPhobos/research-mind
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/MacPhobos/research-mind "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/universal-collaboration-git-worktrees" ~/.claude/skills/macphobos-research-mind-universal-collaboration-git-worktrees && rm -rf "$T"
manifest:
.claude/skills/universal-collaboration-git-worktrees/skill.mdsource content
Git Worktrees
Overview
Git worktrees allow you to have multiple working directories from the same repository, each with a different branch checked out. Work on multiple branches simultaneously without switching.
When to Use Worktrees
✅ Perfect For:
- Stacked PR development (one worktree per PR)
- Urgent hotfix while working on feature
- Parallel development on multiple features
- Code review in isolation
- Testing cross-branch interactions
- Running multiple dev servers simultaneously
⚠️ Consider Alternatives When:
- Limited disk space (worktrees duplicate working directory)
- Simple branch switching is sufficient
- Only working on one branch at a time
Basic Workflow
Create Worktree
New Branch:
# Create worktree with new branch git worktree add ../worktrees/feature-auth -b feature/authentication # Navigate to worktree cd ../worktrees/feature-auth
Existing Branch:
# Create worktree from existing remote branch git worktree add ../worktrees/feature-profile feature/user-profile # Or from origin git worktree add ../worktrees/review origin/feature/pr-to-review
List Worktrees
git worktree list # Output: # /Users/dev/project abc123 [main] # /Users/dev/worktrees/f-auth def456 [feature/authentication] # /Users/dev/worktrees/f-profile ghi789 [feature/user-profile]
Remove Worktree
# Remove worktree (deletes directory) git worktree remove ../worktrees/feature-auth # Or manually delete directory and prune rm -rf ../worktrees/feature-auth git worktree prune
Directory Structure
Recommended layout:
/Users/dev/ ├── my-project/ # Main repository │ ├── .git/ # Git database │ ├── src/ │ └── ... └── my-project-worktrees/ # All worktrees here ├── feature-auth/ # feature/authentication branch ├── feature-profile/ # feature/user-profile branch ├── hotfix-urgent/ # hotfix/urgent-fix branch └── review-pr-123/ # Reviewing PR #123
Use Case: Stacked PRs
Perfect for stacked PR workflow - one worktree per PR:
# Create worktree for each PR in stack git worktree add ../stack/pr-001 -b feature/001-base-auth git worktree add ../stack/pr-002 -b feature/002-user-profile git worktree add ../stack/pr-003 -b feature/003-admin-panel # Work in each independently cd ../stack/pr-001 # Implement base auth git commit -am "feat: base authentication" git push -u origin feature/001-base-auth cd ../stack/pr-002 # Already on feature/002-user-profile branch # Implement user profile (depends on pr-001) git commit -am "feat: user profile with auth" git push -u origin feature/002-user-profile cd ../stack/pr-003 # Implement admin panel (depends on pr-002) git commit -am "feat: admin panel" git push -u origin feature/003-admin-panel
Use Case: Parallel Development
Run multiple dev servers simultaneously:
# Terminal 1: Main feature development cd /project-worktrees/feature-new-ui npm install npm run dev # Server on port 3000 # Terminal 2: Urgent hotfix (different branch) cd /project-worktrees/hotfix-critical npm install npm run dev -- --port 3001 # Server on port 3001 # Both running simultaneously without branch switching
Use Case: Code Review
Review PRs in isolation:
# Create worktree for PR review git worktree add ../review/pr-456 origin/feature/user-auth cd ../review/pr-456 npm install npm test npm run dev # Review code, test functionality # When done, remove worktree cd /main-project git worktree remove ../review/pr-456
Updating Stacked PRs with Worktrees
When base PR changes, update chain across worktrees:
# PR-001 got feedback cd /stack/pr-001 git pull origin feature/001-base-auth # Make changes, push # Update PR-002 (in separate worktree) cd /stack/pr-002 git rebase feature/001-base-auth git push --force-with-lease origin feature/002-user-profile # Update PR-003 (in separate worktree) cd /stack/pr-003 git rebase feature/002-user-profile git push --force-with-lease origin feature/003-admin-panel
Managing Dependencies
Shared node_modules (Save Disk Space)
Option 1: Symlink
cd /worktrees/feature-auth ln -s /main-project/node_modules node_modules
Option 2: Separate Install
cd /worktrees/feature-auth npm install # Independent node_modules
Trade-off:
- Symlink: Less disk space, may have version conflicts
- Separate: More disk space, guaranteed isolation
Best Practices
1. Naming Convention
# Use descriptive, consistent names git worktree add ../worktrees/feature-authentication feature/authentication git worktree add ../worktrees/hotfix-security hotfix/security-patch
2. Location Strategy
# Keep worktrees outside main repo /Users/dev/project/ # Main repo (never delete) /Users/dev/project-worktrees/ # All worktrees here (safe to delete)
3. Cleanup Discipline
# When PR merged, remove worktree immediately git worktree remove path/to/worktree # Periodically check for stale worktrees git worktree prune # Delete merged branches git branch -d feature/old-branch git push origin --delete feature/old-branch
4. One Branch Per Worktree
❌ WRONG: Switching branches in worktree defeats the purpose ✅ CORRECT: Each worktree permanently on one branch
Common Commands
# Create worktree with new branch git worktree add <path> -b <branch> # Create worktree from existing branch git worktree add <path> <branch> # List all worktrees git worktree list # Remove worktree git worktree remove <path> # Clean up stale references git worktree prune # Move worktree to different location git worktree move <old-path> <new-path>
Troubleshooting
Issue: "fatal: '<branch>' is already checked out"
Cause: Branch is checked out in another worktree
Solution:
# List worktrees to find where branch is checked out git worktree list # Either work in existing worktree or remove it first git worktree remove <path-to-old-worktree>
Issue: Disk space concerns
Solution:
- Use symlinks for node_modules
- Remove worktrees when PRs merged
- Run
regularlygit worktree prune - Consider using sparse-checkout for large repos
Issue: IDE confusion with multiple worktrees
Solution:
- Open each worktree as separate workspace
- Use IDE's multi-window/split-workspace features
- Name worktrees descriptively for easy identification
Agent Instructions
When delegating worktree setup to version-control agent:
Task: Create worktrees for stacked PR development Requirements: - Create 3 worktrees in /project-worktrees/ - Worktree 1: pr-001 with branch feature/001-base-auth - Worktree 2: pr-002 with branch feature/002-user-profile - Worktree 3: pr-003 with branch feature/003-admin-panel Commands: git worktree add ../project-worktrees/pr-001 -b feature/001-base-auth git worktree add ../project-worktrees/pr-002 -b feature/002-user-profile git worktree add ../project-worktrees/pr-003 -b feature/003-admin-panel Verification: git worktree list should show all 3 worktrees
Benefits
✅ No Branch Switching: Work on multiple branches without
git checkout
✅ Parallel Servers: Run multiple dev environments simultaneously
✅ Preserve State: Build artifacts and node_modules stay per-branch
✅ Safer Reviews: Test PRs without affecting main working directory
✅ Faster Context Switch: Jump between worktrees instead of rebasing
Related Skills
- Combine worktrees with stacked PR workflowstacked-prs
- General git branching patternsgit-workflow
- Review code in isolated worktreescode-review