Skip to main content
skill CX Codex

git-worktrees · bobmatnyc — Claude Code skill: what it does, how to install

Teaches the agent to manage parallel Git branches using worktrees. Useful for stacked pull requests, urgent bugfixes, and isolated code reviews.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add bobmatnyc/claude-mpm-skills --skill git-worktrees -a claude-code
Open on GitHub

What git-worktrees does

The skill equips coding agents with patterns for managing multiple working directories from a single repository. Instead of stashing changes and switching branches, you can spin up parallel directories like ../project-worktrees/ to run distinct dev servers on separate ports or inspect PRs without touching your ongoing edits.

It details concrete workflows for stacked PRs, updates via git rebase, and cleanup routines using git worktree remove and git worktree prune. For dependencies, it lays out the trade-off between symlinking node_modules to preserve disk space and running independent installations for total isolation.

Each worktree duplicates repository files, which will exhaust storage on machines with minimal free disk space.

What it helps with

  • spin up an isolated worktree for an urgent hotfix without stashing active work
  • organize stacked pull request workflows across independent directories
  • check out remote PRs for isolated code review and test execution
  • run multiple local development servers simultaneously on different ports

Example prompts for the agent

  • Set up a separate git worktree for hotfix/urgent-fix outside the main repo folder
  • Create a stacked PR directory structure for base-auth and user-profile branches
  • Check out origin/feature/user-auth into a dedicated review worktree and run tests

How to install git-worktrees

1Skills CLI (Vercel)

npx skills add bobmatnyc/claude-mpm-skills --skill git-worktrees -a claude-code

2Manually: put the files in place

~/.claude/skills/git-worktrees/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/git-worktrees/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about git-worktrees

How to install git-worktrees in Claude Code?

Run npx skills add bobmatnyc/claude-mpm-skills --skill git-worktrees -a claude-code. The skill file is placed at ~/.claude/skills/git-worktrees/SKILL.md.

What is the main benefit of using git-worktrees?

It keeps multiple branches checked out at the same time in separate directories. You can run two dev servers at once or switch tasks without stashing incomplete changes.

How to resolve the fatal branch is already checked out error?

Run git worktree list to locate the folder holding that branch. You can then work directly in that directory or delete it using git worktree remove <path>.

Source text

SKILL.md · MIT
---
name: git-worktrees
description: Use git worktrees for parallel development on multiple branches simultaneously
user-invocable: false
disable-model-invocation: true
tags: [git, worktrees, parallel-development, productivity]
related_agents: [version-control, engineer]
progressive_disclosure:
  entry_point:
    summary: "Use git worktrees for parallel development on multiple branches simultaneously"
    when_to_use: "When working with version control, branches, or pull requests."
    quick_start: "1. Review the core concepts below. 2. Apply patterns to your use case. 3. Follow best practices for implementation."
---
# 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:**
```bash
# Create worktree with new branch
git worktree add ../worktrees/feature-auth -b feature/authentication

# Navigate to worktree
cd ../worktrees/feature-auth
```

**Existing Branch:**
```bash
# 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

```bash
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

```bash
# 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:

```bash
# 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:

```bash
# 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:

```bash
# 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:

```bash
# 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**
```bash
cd /worktrees/feature-auth
ln -s /main-project/node_modules node_modules
```

**Option 2: Separate Install**
```bash
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
```bash
# Use descriptive, consistent names
git worktree add ../worktrees/feature-authentication feature/authentication
git worktree add ../worktrees/hotfix-security hotfix/security-patch
```

### 2. Location Strategy
```bash
# 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
```bash
# 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

```bash
# 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:**
```bash
# 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 `git worktree prune` regularly
- 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

- `stacked-prs` - Combine worktrees with stacked PR workflow
- `git-workflow` - General git branching patterns
- `code-review` - Review code in isolated worktrees

© bobmatnyc · MIT · bobmatnyc/claude-mpm-skills

Similar skills

All skills for Git and GitHub →

git-worktrees by other authors comes first.

From the same set125

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor