# Worktree в Claude Code: две задачи одновременно без конфликтов

Канонический URL: https://zero2claude.ru/blog/claude-code-worktree
Дата: 2026-10-13
Теги: claude-code, git, агенты, практика

Как запустить две сессии Claude Code параллельно через claude --worktree: что общее у рабочих папок, от какой ветки стартует worktree, зачем нужен .worktreeinclude и как потом слить работу без потерь.

Рано или поздно у тебя появляются две задачи, которые не зависят друг от друга: поправить README и дописать тест к старой функции. Каждая займёт у Claude минут десять. Ждать, пока закончится первая, обидно, а запускать две сессии в одной папке опасно: они будут читать и править одни и те же файлы, и в какой-то момент одна перезапишет то, что только что сделала другая.

Решение давно есть в самом git, а Claude Code сделал его удобным. Это worktree — вторая рабочая папка того же репозитория. В этом посте разберём, как она работает в Claude Code и где на ней обычно спотыкаются.

<Cover src="/blog/claude-code-worktree.jpg" alt="Два мастера работают за отдельными верстаками под одним деревом" />

## Что такое worktree простыми словами

Представь репозиторий как книгу с общей историей правок. Обычно у тебя один экземпляр, раскрытый на одной [ветке](/glossary/branch). [Worktree](/glossary/worktree) — это второй экземпляр той же книги, раскрытый на другой ветке. Пишешь в нём что хочешь, а первый экземпляр остаётся нетронутым. История у обоих общая, поэтому потом правки легко свести.

В Claude Code для этого одна команда:

```bash
claude --worktree docs-pass
```

Claude Code создаст папку `.claude/worktrees/docs-pass/`, заведёт в ней новую ветку `worktree-docs-pass` и запустит сессию прямо там. Короткая форма — `claude -w docs-pass`. Вторую задачу запускаешь в соседнем окне терминала с другим именем, например `claude -w test-pass`.

Сессия в worktree правит только свою копию файлов. Её команды не запускаются в твоей основной папке и не направляют туда git.

Одно условие: в этом репозитории ты уже хотя бы раз запускал обычный `claude` и ответил на вопрос о доверии папке. Без этого `claude --worktree` завершится с ошибкой.

## Что у папок общее, а что у каждой своё

Это главное, что нужно держать в голове:

| Общее для всех worktree | У каждой папки своё |
|---|---|
| коммиты | незакоммиченные правки |
| ветки | установленные зависимости, например `node_modules` |
| история | файлы, которые git игнорирует, например `.env` |

Отсюда два практических следствия. Во-первых, каждый worktree — свежая выгрузка из git, и сессии придётся заново поставить зависимости проекта. Во-вторых, всего, что лежит в `.gitignore`, в новой папке просто не будет. Если проект без `.env` не запускается, сессия в worktree упрётся в это с первой же команды.

## Подготовка: три шага до первого запуска

**Шаг 1. Спрячь папку worktree от git.** Иначе их содержимое вылезет в основной папке как куча неотслеживаемых файлов:

```bash
echo '.claude/worktrees/' >> .gitignore
git add .gitignore && git commit -m "Ignore Claude Code worktrees"
git push
```

Исключай именно `.claude/worktrees/`, а не весь `.claude/`. В `.claude/` лежат настройки и навыки, которые ты коммитишь для всей команды, — их прятать не нужно.

**Шаг 2. Перечисли нужные игнорируемые файлы в `.worktreeinclude`.** Этот файл в корне репозитория говорит Claude Code, что скопировать в каждую новую папку:

```bash
echo '.env' > .worktreeinclude
```

Не превращай его в свалку. Каждый worktree получает собственную копию каждого перечисленного файла, а значит, и каждого секрета. Пиши туда только то, без чего проект не стартует.

**Шаг 3. Запушь.** Зачем — в следующем разделе, это самая частая ловушка.

## Ловушка: worktree не видит твой свежий коммит

Ты закоммитил правку час назад, запустил `claude -w`, а сессия её не видит. Ничего не сломалось: новый worktree по умолчанию ответвляется **от основной ветки на удалённом репозитории**, а не от твоего локального HEAD. Незапушенные коммиты и всё, что есть только в твоей фичевой ветке, в него не попадают.

Два выхода:

- запушить нужные коммиты до запуска worktree;
- попросить стартовать от локального HEAD — добавить в `.claude/settings.local.json`:

```json
{ "worktree": { "baseRef": "head" } }
```

Если удалённого репозитория у проекта нет вовсе, worktree и так стартует от локального HEAD.

## Как вернуть работу обратно

Каждая сессия коммитит на своей ветке. Сливать будешь ты сам, **из основной папки**, в отдельном терминале:

```bash
git worktree list
git merge worktree-docs-pass
git merge worktree-test-pass
```

Почему не попросить об этом саму сессию? Пока она изолирована в worktree, Claude Code блокирует её git-команды, которые лезут в основную папку. Это не баг, а та самая изоляция, ради которой всё затевалось.

Если обе задачи поменяли одни и те же строки, git остановится на конфликте. Разреши его руками или запусти обычный `claude` в основной папке и попроси помочь.

Когда всё слито, набери `/exit` в каждой сессии. Если на ветке worktree есть новые коммиты, Claude Code спросит, оставить папку или удалить. После слияния смело удаляй.

<Callout type="warning" title="Три вещи, о которых жалеют">
Удаление worktree стирает его папку и ветку вместе со всем, что ты не слил, поэтому сначала git merge, потом удаление. Ответ «Да, и больше не спрашивать» на команду оболочки в сессии worktree обычно сохраняется в .claude/settings.local.json основной папки и действует во всём репозитории даже после удаления worktree — одобряй так только то, что разрешил бы везде. И каждая параллельная сессия расходует свои токены: давай каждой одну небольшую задачу.
</Callout>

## Когда worktree не нужен

Параллельность нужна не всегда. Если задачи зависят друг от друга, например тест проверяет код, который вторая сессия ещё пишет, проще сделать их по очереди в одной сессии. А если тебе нужно просто разгрузить контекст, например изучить три папки и получить короткие сводки, хватит [субагентов](/glossary/subagent): им не нужна отдельная рабочая папка. Как выбирать между субагентами, workflow и командой агентов, разбираем в уроке [«Какую схему выбрать»](/learn/claude-code-pro/4-2-kakuyu-shemu-vybrat).

Worktree хорош, когда две задачи **правят файлы**, не зависят друг от друга и каждая заканчивается коммитом.

## Частые вопросы

<Faq>
<FaqItem q="Чем claude --worktree отличается от обычного git checkout другой ветки?">

Checkout переключает твою единственную папку на другую ветку, и обе задачи всё равно делят один набор файлов. Worktree создаёт вторую папку на своей ветке, поэтому две сессии работают одновременно и не трогают файлы друг друга.

</FaqItem>
<FaqItem q="Где лежит папка worktree и как называется ветка?">

Папка — `.claude/worktrees/<имя>/` внутри репозитория, ветка — `worktree-<имя>`. Например, для `claude -w docs-pass` это `.claude/worktrees/docs-pass/` и `worktree-docs-pass`.

</FaqItem>
<FaqItem q="Почему в новом worktree нет файла .env?">

Каждый worktree — свежая выгрузка из git, а `.env` git игнорирует. Перечисли его в файле `.worktreeinclude` в корне репозитория, и он будет копироваться в каждый новый worktree.

</FaqItem>
<FaqItem q="Может ли сессия в worktree сама слить свою ветку в основную?">

Нет. Пока сессия изолирована в worktree, Claude Code блокирует её git-команды, которые затрагивают основную папку. Сливаешь ты сам из основной папки через `git merge`.

</FaqItem>
</Faq>

## Попробуй руками

В уроке [«Параллельные сессии в worktree»](/learn/claude-code-pro/4-1-worktree-parallelnye-sessii) курса «Claude Code: уровень профи» всё это отрабатывается в тренажёре прямо в браузере: подготовить `.gitignore`, создать `.worktreeinclude` и запустить первую сессию в worktree. Курс бесплатный, а короткая выжимка команд всегда под рукой в [шпаргалке по Claude Code](/claude-code-shpargalka).
