Git Worktrees + Claude Code: параллельная разработка без боли
Представьте ситуацию: вы запускаете Claude Code, чтобы он написал новую фичу авторизации. Пока он работает, прилетает баг в проде. Вы открываете второй терминал, просите Claude пофиксить баг... и всё ломается. Два агента правят одни и те же файлы, конфликтуют, затирают изменения друг друга. Знакомо?
В феврале 2026 года в Claude Code завезли нативную поддержку git worktrees, и это, пожалуй, самый мощный апгрейд для тех, кто запускает несколько сессий параллельно. Разберёмся, как это работает и почему команда Anthropic называет worktrees «главным productivity-хаком».
Зачем вообще нужны worktrees
Git worktree - это отдельная рабочая директория, привязанная к тому же репозиторию. У каждого worktree своя ветка, свои файлы, но общая история коммитов и remote-подключения.
Проще говоря: вместо одной папки с проектом у вас появляется несколько «клонов», которые не мешают друг другу. Но при этом это не полноценные клоны - они делят между собой .git, так что не нужно скачивать репозиторий заново.
Важно: worktrees существуют в Git давно, но раньше настраивать их для Claude Code приходилось вручную. Теперь всё работает одним флагом.
Быстрый старт: флаг --worktree
Самый простой способ - запустить Claude Code с флагом --worktree (или -w):
Запускаем Claude в worktree с названием "feature-auth" claude --worktree feature-auth # В другом терминале - второй агент для багфикса claude --worktree bugfix-123 # Лень придумывать имя? Claude сам сгенерирует claude --worktree # Создаст что-то вроде "bright-running-fox"
Что происходит под капотом:
- Создаётся директория <repo>/.claude/worktrees/feature-auth/
- Автоматически создаётся ветка worktree-feature-auth от дефолтной remote-ветки
- Claude Code запускается уже внутри этого worktree
Вот и всё. Два агента, два терминала, ноль конфликтов.
Практический сценарий: три задачи параллельно
Допустим, у вас утро понедельника и три задачи в бэклоге. Раньше вы бы делали их последовательно. Теперь:
Терминал 1 - новая фича:
claude --worktree feature-payments > "Реализуй интеграцию с платёжным шлюзом Stripe по спецификации в docs/payments.md"
Терминал 2 - багфикс:
claude --worktree bugfix-memory-leak > "В сервисе UserService есть утечка памяти при обработке WebSocket-соединений. Найди и исправь"
Терминал 3 - рефакторинг:
claude --worktree refactor-api-v2 > "Отрефактори REST API контроллеры, вынеси валидацию в middleware"
Каждый Claude работает изолированно: правит свои файлы, делает свои коммиты, не подозревая о существовании соседей.
Devhack: Борис Черни из команды Anthropic рекомендует запускать 3-5 worktrees одновременно. Некоторые разработчики из команды Claude Code настраивают shell-алиасы (za, zb, zc) чтобы переключаться между worktrees одним нажатием клавиши. Отдельный лайфхак - держать один «аналитический» worktree только для чтения логов и запросов к базе данных.
Subagent worktrees: параллелизм внутри параллелизма
А вот здесь начинается магия. Мало того что вы можете запустить несколько Claude-сессий в разных worktrees - сами субагенты внутри одной сессии тоже могут работать в изолированных worktrees.
Это особенно полезно для масштабных миграций и batch-изменений. Например:
> "Обнови все 15 микросервисов на новую версию SDK. Используй worktrees для своих агентов"
Claude порождает субагентов, каждый из которых получает свой worktree и обновляет свой микросервис. Когда субагент завершает работу без изменений, его worktree автоматически удаляется.
Можно пойти ещё дальше и прописать это поведение в кастомном агенте через frontmatter:
--- isolation: worktree --- Ты агент для миграции зависимостей. Обнови package.json и исправь breaking changes.
После этого агент всегда будет создавать себе worktree автоматически. Не нужно просить об этом каждый раз.
Что происходит при выходе: автоматическая очистка
Один из приятных моментов - Claude Code сам разбирается с уборкой:
- Нет изменений - worktree и ветка удаляются автоматически. Чисто.
- Есть изменения или коммиты - Claude спросит: оставить или удалить? Если оставить, директория и ветка сохранятся, и можно вернуться к ним позже. Если удалить - все незакоммиченные изменения будут потеряны.
Внимание: добавьте .claude/worktrees/ в .gitignore, чтобы содержимое worktrees не отображалось как untracked files в основном репозитории. Это не критично, но сильно снижает «шум» в git status.
echo ".claude/worktrees/" >> .gitignore
Как слить изменения из worktree в основную ветку
Итак, Claude поработал в worktree, накоммитил изменений, всё выглядит хорошо. А дальше что? Worktree - это просто директория с обычной git-веткой. Мержить её можно точно так же, как любую другую ветку. Никакой магии, никаких специальных команд.
Классический merge
Самый прямолинейный путь. Переходим в основной worktree (он же корневая директория проекта) и мержим:
Возвращаемся в основную директорию проекта cd /path/to/my-project # Убеждаемся, что мы на main git checkout main git pull origin main # Мержим ветку из worktree git merge worktree-feature-auth # Пушим git push origin main
Важно: ветка из worktree, созданного через claude --worktree feature-auth, будет называться worktree-feature-auth. Claude добавляет префикс worktree- автоматически.
Через Pull Request (рекомендуемый способ)
На практике чаще всего вы захотите не мержить напрямую, а создать PR. Это даёт код-ревью, CI/CD проверки и вообще нормальный рабочий процесс:
Из директории worktree пушим ветку в remote cd .claude/worktrees/feature-auth git push origin worktree-feature-auth # Дальше создаём PR через GitHub/GitLab как обычно
Или можно попросить Claude сделать это прямо из сессии:
> "Запуши изменения и создай Pull Request в main с описанием того, что было сделано"
Claude запушит ветку и (если настроен gh CLI) создаст PR с описанием.
Cherry-pick отдельных коммитов
Иногда из worktree нужна не вся работа, а конкретные коммиты. Например, Claude сделал пять коммитов, а вам нужны только два:
Смотрим историю коммитов в ветке worktree git log worktree-bugfix-123 --oneline # a1b2c3d Фикс утечки памяти в WebSocket-хендлере # e4f5g6h Рефакторинг логгера (не нужен) # h7i8j9k Обновление тестов для WebSocket # Cherry-pick только нужных коммитов git checkout main git cherry-pick a1b2c3d h7i8j9k
А теперь самое интересное: конфликты
Вот здесь начинается реальная жизнь. Если два worktree правили одни и те же файлы, при мерже будут конфликты. Worktrees не защищают от конфликтов - они защищают от того, чтобы два агента одновременно не топтали один и тот же файл на диске. Но при слиянии веток конфликты всё ещё возможны.
Сценарий: Claude в worktree-feature-auth добавил middleware аутентификации в server.ts, а Claude в worktree-refactor-api переписал структуру роутера в том же файле.
git merge worktree-feature-auth # Auto-merging src/server.ts # CONFLICT (content): Merge conflict in src/server.ts # Automatic merge failed; fix conflicts and then commit the result.
Дальше есть два пути.
Разрулить вручную:
Открываем файл с конфликтами, правим <<<< ==== >>>> маркеры code src/server.ts # Когда всё починили git add src/server.ts git commit -m "Merge feature-auth: resolve conflict in server.ts"
Попросить Claude помочь:
Запускаем Claude прямо в основном worktree cd /path/to/my-project claude > "Я мержу ветку worktree-feature-auth в main, есть конфликт в src/server.ts. > Разреши конфликт: нужно сохранить и новый middleware аутентификации, > и рефакторинг роутера"
Claude посмотрит на конфликтные маркеры, поймёт контекст обеих сторон и предложит решение. Это, кстати, один из случаев, когда AI-ассистент реально экономит время - разрешение конфликтов в чужом коде бывает мучительным делом.
Стратегия последовательного мержа
Devhack: Чтобы минимизировать конфликты, старайтесь разносить задачи по разным частям кодовой базы. Если один Claude работает над авторизацией, а второй над платежами - шансы на конфликт минимальны. Проблемы начинаются, когда оба агента лезут в общие файлы типа package.json, конфигурации или shared-утилиты.
Мержить такие worktrees лучше последовательно: слили первый, подтянули main во второй, потом слили второй.
Сначала мержим первую фичу git checkout main git merge worktree-feature-auth git push origin main # Обновляем вторую ветку от свежего main git checkout worktree-refactor-api git rebase main # Если есть конфликты - решаем их здесь, в контексте этой ветки # Теперь мержим вторую фичу - уже без конфликтов git checkout main git merge worktree-refactor-api
Такой подход проще, потому что конфликты решаются по одному, а не все разом. А если использовать PR-flow, то вообще красота: слили первый PR, CI прошёл, потом ребейзнули второй - и в нём уже видно, ломается что-то или нет.
Ручное управление: для тех, кто любит контроль
Флаг --worktree покрывает 90% случаев, но иногда нужно больше контроля. Например, разместить worktree в конкретной директории или привязать к существующей ветке:
Worktree с новой веткой в произвольной папке git worktree add ../my-project-feature-a -b feature-a # Worktree с существующей веткой git worktree add ../my-project-bugfix bugfix-123 # Запускаем Claude в этом worktree cd ../my-project-feature-a && claude # Смотрим все активные worktrees git worktree list # Удаляем, когда закончили git worktree remove ../my-project-feature-a
Важно: в каждом новом worktree нужно заново инициализировать окружение. Это значит npm install, активация виртуального окружения Python, или что там требует ваш стек. Зависимости не шарятся между worktrees.
Типичные грабли и как их обойти
«Почему npm install занимает так долго в каждом worktree?»
Потому что node_modules не расшаривается. Это можно частично решить, используя pnpm с его store - он хранит пакеты централизованно и создаёт хардлинки. Или просто смириться: worktrees экономят время на переключении контекста, а npm install можно пережить.
«Случайно удалил worktree с несохранёнными изменениями»
Если вы использовали --worktree, Claude предупредит перед удалением. Но при ручном управлении через git worktree remove --force - всё, данные потеряны. Коммитьте чаще.
«Хочу использовать worktrees, но у нас Mercurial/SVN»
Для не-git систем контроля версий можно настроить хуки WorktreeCreate и WorktreeRemove с кастомной логикой создания и очистки worktrees. Эти хуки заменят дефолтное git-поведение при использовании --worktree.
Итого: когда стоит использовать worktrees
Worktrees с Claude Code - это не просто удобная фича, а изменение всего подхода к работе. Вместо «одна задача за раз» появляется «три-пять задач параллельно».
Когда это особенно полезно:
- Параллельная работа над несколькими фичами или багфиксами
- Масштабные миграции и batch-обновления через субагентов
- Код-ревью в отдельном worktree, пока основная работа продолжается
- Выделенный worktree для анализа и дебага, который не трогает рабочий код
Попробуйте начать с двух worktrees и посмотрите, как это ощущается. Скорее всего, через неделю три-четыре параллельных сессии станут нормой.
Документация по git worktrees в Claude Code: docs.claude.com Официальная документация Git worktree: git-scm.com/docs/git-worktree