Git Worktrees + Claude Code: параллельная разработка без боли

Представьте ситуацию: вы запускаете Claude Code, чтобы он написал новую фичу авторизации. Пока он работает, прилетает баг в проде. Вы открываете второй терминал, просите Claude пофиксить баг... и всё ломается. Два агента правят одни и те же файлы, конфликтуют, затирают изменения друг друга. Знакомо?

Git Worktrees + Claude Code: параллельная разработка без боли

В феврале 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 автоматически. Не нужно просить об этом каждый раз.

Git Worktrees + Claude Code: параллельная разработка без боли

Что происходит при выходе: автоматическая очистка

Один из приятных моментов - 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

3
2 комментария