Git Worktrees: параллельные сессии в одном репо
Цель: разрабатывать 2-3 фичи **одновременно**, каждая в изолированной копии репо. Ждать Claude больше не нужно.
Что такое git worktree
Git worktree — вторая (третья, десятая) рабочая директория, привязанная к одному репозиторию, но на другой ветке.
git worktree add ../auth-feature -b auth-featureТеперь у тебя:
- Оригинальный чекаут на
main - Соседняя директория
../auth-feature/на веткеauth-feature - Обе видят один и тот же
.git/под капотом
В Claude Code
Встроенная поддержка:
claude -w auth-feature # короткая форма
claude --worktree billing # полнаяИли галочка worktree в десктопном приложении.
Claude сам создаст worktree, переключится в него, начнёт сессию.
Типовой workflow
Открываешь 3 терминала:
Terminal 1: claude --worktree auth-feature
Terminal 2: claude --worktree billing-feature
Terminal 3: claude --worktree test-suite
Каждая сессия:
- На своей ветке
- В своей директории
- С отдельным контекстом — не мешают друг другу
- Коммитится независимо
Когда фича готова → мержишь ветку в main → worktree можно удалить (git worktree remove).
/batch — массовые миграции через worktrees
Команда /batch распределяет работу между агентами в отдельных worktrees. Десятки, сотни, тысячи одновременно.
Пример:
claude "/batch migrate all our 47 express routes from callbacks to async/await"Claude:
- Уточнит задачу (спросит детали)
- Поделит на 47 подзадач
- Создаст 47 worktrees
- Запустит 47 параллельных агентов
- Соберёт результаты
Подходит для:
- Миграций версий библиотек
- Замены паттернов по всему коду
- Автоматического обновления тестов
Не-git VCS
Если у тебя не git (Perforce, Mercurial) — хук WorktreeCreate со своей логикой создания изолированной копии. Redis? Тоже можно адаптировать.
Грабли
node_modules / venv в каждом worktree
Каждая директория — свои зависимости. 3 worktrees = 3 раза npm install. Лечения:
# Симлинк node_modules
ln -s ../main/node_modules ./node_modules
# Или pnpm с глобальным store — работает из коробкиПорты dev-сервера
# main
npm run dev # :3000
# auth-feature
PORT=3001 npm run dev
# billing
PORT=3002 npm run devНастрой переменные окружения в .env.local разных worktrees.
CLAUDE.md дрифт
CLAUDE.md читается из worktree-директории. Если редактируешь в одном — не автоматически подхватывается в других до синка веток. Синхронизируй через мерж main.
Забыть worktree
Накопилось 10 старых worktrees? Почисти:
git worktree list
git worktree prune
git worktree remove <path>Когда использовать
✅ Две независимые фичи одновременно
✅ Рефакторинг в параллель с продолжением разработки
✅ Эксперимент — если не зашло, worktree удаляется, main чист
✅ /batch для массовых миграций
✅ Параллельный прогон долгих тестов/бенчмарков
Когда НЕ использовать
❌ Зависимые фичи (конфликты мержа неизбежны) ❌ Простые правки (overhead сетапа больше выигрыша) ❌ Если ты не умеешь разруливать merge conflicts — сначала научись
Практика (15 минут)
Задача
-
Возьми свой проект
-
Запусти:
claude --worktree experiment-aВ этой сессии: "add a small feature like changing a button color"
-
Открой второй терминал:
claude --worktree experiment-bВ этой: "add a logging statement to the main entry point"
-
Оба работают параллельно. Коммитят в свои ветки.
-
Посмотри
git worktree list— увидишь оба чекаута. -
Удали когда закончишь:
git worktree remove ../experiment-a git worktree remove ../experiment-b
Что дальше
Следующий урок: .claude/rules/ с path-scoping. Модульные правила которые загружаются только когда Claude трогает нужные файлы. Решение проблемы раздутого CLAUDE.md.