Git Worktrees: Multiple Branches, Zero Context Switching
Work on multiple branches simultaneously without the mental overhead of stashing and switching
1 minute read
What Are Git Worktrees?
Git worktrees let you have multiple branches checked out simultaneously in different directories. Instead of constantly switching branches and stashing changes, each worktree is an independent working directory sharing the same .git repository.
How Worktrees Work
Current situation: Your main working directory is on one branch (e.g., main).
Worktree paradigm:
- Keep your primary branch (main) in the current directory
- Create worktrees in a sibling
.worktrees/directory for other branches - Each worktree is an independent working directory sharing the same
.gitrepo
Recommended structure:
your-project/ # main branch (current dir)
your-project/.worktrees/
├── feature-x/ # feature-x branch
├── bugfix-y/ # bugfix-y branch
└── staging/ # staging branch
Common Workflow
Create new branch:
git worktree add .worktrees/feature-name -b feature-name
Use existing branch:
git worktree add .worktrees/existing-branch existing-branch
List all worktrees:
git worktree list
Clean up when done:
git worktree remove .worktrees/feature-name
Why Use Worktrees?
No stashing/context switching — Stop interrupting your flow to switch branches and stash changes.
Run multiple dev servers — Test one branch while developing on another.
Easy branch comparisons — Open two directories side-by-side to compare implementations.
Clean mental model — Each branch has its own physical space on disk.
When to Use Worktrees
- Working on a feature while fixing urgent bugs on main
- Running regression tests on one branch while developing on another
- Comparing implementations across branches
- Code review while maintaining local work-in-progress
- Running parallel AI agents — Point multiple Claude Code instances at different worktrees to work on separate features simultaneously (see guide)
