Skip to main content
git worktree — это отдельный рабочий каталог с собственными файлами и веткой, использующий ту же историю репозитория и удалённый сервер, что и ваша основная копия. Запуск каждого сеанса Claude Code в собственном worktree означает, что правки в одном сеансе никогда не затрагивают файлы в другом, поэтому один сеанс может создавать функцию, а второй исправлять ошибку.
Worktrees требуют git-репозитория; для других систем контроля версий настройте hooks для замены логики git. В десктопном приложении выберите опцию worktree при запуске сеанса, чтобы дать ему собственный worktree.
Worktrees — один из нескольких способов запуска Claude параллельно. Они изолируют правки файлов. Subagents разделяют работу внутри одного сеанса, а кросс-сеансовая передача сообщений позволяет Claude передавать результаты между сеансами в ваших worktrees. См. Запуск агентов параллельно, чтобы сравнить подходы, или перейдите к Изолируйте subagents с помощью worktrees, чтобы использовать worktrees и subagents вместе. Большинству сеансов нужны только первые два раздела: запустите Claude в worktree, затем очистите при выходе. Вернитесь к остальной части страницы, когда вам нужно возобновить сеанс, изменить способ создания worktrees или отладить сбой.

Запустите Claude в worktree

Передайте --worktree или -w с именем, чтобы создать изолированный worktree и запустить Claude в нём. По умолчанию worktree создаётся в .claude/worktrees/<name>/ в корне вашего репозитория на новой ветке с именем worktree-<name>:
Запустите команду снова с другим именем в другом терминале, чтобы запустить второй изолированный сеанс. Если вы опустите имя, Claude сгенерирует одно, например bright-running-fox. Интерактивные запуски требуют доверия рабочей области: если вы ещё не запускали Claude в этом каталоге, запустите claude один раз там, чтобы принять диалог доверия, или --worktree завершится с ошибкой, предлагая вам это сделать. Неинтерактивные запуски с -p пропускают проверку доверия, поэтому claude -p --worktree продолжает работу без неё.
Добавьте .claude/worktrees/ в ваш .gitignore, чтобы содержимое worktree не отображалось как неотслеживаемые файлы в вашей основной копии.

Настройте окружение worktree

Worktree — это свежая копия, поэтому инициализируйте вашу среду разработки там: попросите Claude установить зависимости или запустите настройку вашего проекта самостоятельно в каталоге worktree в .claude/worktrees/. Чтобы автоматически переносить игнорируемые git файлы, такие как .env, в каждый новый worktree, добавьте файл .worktreeinclude.

Попросите Claude создать worktree

Вы также можете попросить Claude “работать в worktree” во время сеанса, и он создаст один с помощью инструмента EnterWorktree. После входа в worktree Claude может переключиться непосредственно на другой worktree в .claude/worktrees/, вызвав EnterWorktree с целевым путём; предыдущий worktree остаётся на диске нетронутым. Когда Claude входит в путь вне каталога .claude/worktrees/ репозитория, Claude Code сначала запрашивает ваше одобрение, потому что это перемещение берёт рабочий каталог сеанса, доступ на запись и конфигурацию проекта, такую как CLAUDE.md и settings, в это место. Правило разрешения EnterWorktree permission rule или выбор “не спрашивать снова” не подавляет это приглашение; только режим bypassPermissions пропускает его. До версии 2.1.206 Claude мог войти в любой существующий путь worktree без запроса.
Пути hooks не следуют за worktree. После того как Claude входит в worktree, Claude Code сохраняет ${CLAUDE_PROJECT_DIR} в ваших hooks там, где он был, и передаёт путь worktree им другим способом:
  • ${CLAUDE_PROJECT_DIR} остаётся на месте: он по-прежнему указывает на корень проекта, где сеанс начался, поэтому команда hook, такая как ${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh, по-прежнему запускает скрипт в основной копии.
  • cwd следует за Claude: поле cwd в входном JSON hook — это корень worktree, и оно снова перемещается, когда Claude запускает cd. Читайте его, когда hook нужен путь worktree.

Очистка worktrees

Когда вы выходите из интерактивного сеанса worktree, Claude проверяет worktree на наличие работы, которая будет удалена при удалении: изменённые или неотслеживаемые файлы, незафиксированная работа внутри проверенных подмодулей и новые коммиты.
  • Worktree чист: для безымянного сеанса Claude автоматически удаляет worktree и его ветку. Именованный сеанс сначала предлагает вам, чтобы вы могли сохранить worktree на потом
  • Worktree содержит работу: Claude предлагает вам сохранить или удалить worktree. Сохранение сохраняет каталог и ветку, чтобы вы могли вернуться позже. Удаление удаляет каталог worktree и его ветку, вместе со всей работой в них
  • Состояние worktree не может быть проверено: когда Claude Code не может подсчитать изменения worktree или не может проверить проверки его подмодулей, он предлагает вам вместо автоматического удаления worktree. Подсказка указывает, что он не смог проверить
Неинтерактивные запуски с -p не имеют подсказки выхода, поэтому Claude не очищает их worktrees, и Claude Code оставляет блокировку, которую он взял на каждый при создании, на месте до тех пор, пока более поздний сеанс очистка устаревших блокировок не освободит её. Чтобы удалить один, запустите git worktree remove; если git отказывает, потому что worktree заблокирован, сначала запустите git worktree unlock на нём. На Windows удаление worktree не удаляет файлы вне него. Если папка внутри worktree — это ссылка на что-то другое, например соединение NTFS или символическая ссылка на каталог, Claude Code удаляет только ссылку и сохраняет папку, на которую она указывает. До версии 2.1.205 удаление worktree со ссылкой, вложенной в подкаталог, могло удалить папку, на которую она указывала.

Возобновите сеанс worktree

Когда вы возобновляете сеанс, который был внутри worktree, Claude Code возвращает сеанс в этот worktree. Это применяется к интерактивным возобновлениям, к --continue и --resume в неинтерактивном режиме с -p и к Agent SDK. Вернувшись в worktree, Claude может по-прежнему выйти из него с помощью инструмента ExitWorktree. Перед возвращением сеанса в его worktree Claude Code проверяет, что worktree по-прежнему является отдельной копией от основной, и отказывается повторно входить в worktree, который не проходит проверку. Для git worktree проверка читает его метаданные git. Worktree без метаданных git, такой как тот, который создал hook WorktreeCreate, может пройти проверку; случаи, которые Claude Code по-прежнему отказывается использовать, перечислены с их восстановлением в разделе Claude Code отказывается использовать worktree. Для сообщений и способов восстановления от каждого см. Сеанс возобновляется вне его worktree. Где вы запускаете и как вы возобновляете, изменяет то, что Claude Code повторно входит:
  • Каталог запуска: возобновите из основной копии или другого каталога репозитория. Claude Code повторно входит в worktree, который он создал с git в .claude/worktrees/, даже когда вы запускаете из него. Когда вы запускаете из любого другого worktree, Claude Code повторно входит в него только если может поручиться за него оттуда: worktree, который является его собственным репозиторием, один без метаданных git, или запуск из подкаталога worktree, который вы создали с git worktree add, отказывает, поэтому запускайте их из основной копии.
  • --fork-session: разветвлённый сеанс начинается в каталоге, из которого вы запустили Claude, и Claude Code оставляет worktree исходного сеанса нетронутым.
  • Удалённый worktree: если каталог worktree больше не существует, Claude Code возобновляет сеанс в каталоге, из которого вы запустили Claude. Он сообщает вам, что worktree исчез, и очищает привязку worktree сеанса.
До версии 2.1.212 неинтерактивное возобновление оставалось в начальном каталоге и ExitWorktree сообщал, что не было активного сеанса worktree для выхода.
Когда Claude входит или выходит из worktree, который Claude Code создал с git, стенограмма следует: Claude Code записывает сеанс в новый рабочий каталог сеанса, так же как /cd это делает, поэтому /desktop и --resume находят его там. Выход перемещает его обратно тем же способом. Worktree, созданный hook WorktreeCreate, сохраняет свою стенограмму в каталоге запуска. Требуется Claude Code версии 2.1.198 или позже.

Как Claude Code обеспечивает изоляцию

Пока сеанс изолирован в worktree, Claude Code блокирует вызовы инструментов, которые определяют приведённые ниже проверки. Те же правила применяются независимо от того, запустили ли вы сеанс с --worktree, Claude вошёл в worktree с EnterWorktree или вы возобновили сеанс worktree. Та же самая защита охватывает каждого subagent, который Claude порождает из изолированного сеанса. Она применяется независимо от того, является ли сеанс интерактивным или работает в фоне. Subagents, которые работают в собственном worktree, несут те же проверки. Их история версий находится в разделе Запись файлов subagent. Claude Code применяет четыре проверки:
  • Правки файлов: Claude Code блокирует Edit, Write или NotebookEdit, который нацелен на путь в основной копии.
  • Рабочий каталог команды: Claude Code блокирует команду Bash, PowerShell или Monitor, чей рабочий каталог разрешается в основную копию, или чей рабочий каталог он не может проверить, остаётся вне неё.
  • Перенаправления git: Claude Code блокирует команду Bash или Monitor, которая перенаправляет git в основную копию. Перенаправление может поступать через git -C, --git-dir, переменную GIT_DIR или GIT_WORK_TREE или cd в основную копию перед запуском git.
  • Форма команды: Claude Code блокирует команду Bash или Monitor, когда он не может проверить из текста команды, что любой git, который запускает команда, остаётся внутри worktree. Это происходит, например, когда имя команды вычисляется во время выполнения, когда синтаксис не может быть проанализирован, или когда расширение, такое как ${!name} или ${ command; }, может запустить команду, которую текст не указывает явно. Claude Code сообщает Claude, как переписать отказанную команду, например разделив её на простые отдельные команды. Вы не можете отключить эту проверку.
Проверки применяются к репозиторию, из которого вы запустили Claude Code. Они также охватывают основную копию, на которую ссылается связанный worktree. Для команд PowerShell Claude Code применяет только проверку рабочего каталога. Claude видит каждый отказ как ошибку инструмента, которая называет worktree и говорит, как продолжить. Для отказанной команды см. что означает сообщение об отказе и как его очистить.

Изолируйте subagents с помощью worktrees

Subagents могут работать в собственных worktrees, чтобы параллельные правки не конфликтовали. Попросите Claude “использовать worktrees для ваших агентов” или сделайте изоляцию постоянной для пользовательского subagent, добавив isolation: worktree в frontmatter. Этот subagent в .claude/agents/ всегда работает в собственном worktree:
Каждый subagent получает временный worktree, который Claude Code автоматически удаляет, когда subagent завершает работу без изменений; worktree с изменениями остаётся на диске до тех пор, пока периодическая очистка ниже не сможет его удалить без потери работы. Worktrees subagents используют ту же базовую ветку, что и --worktree, поэтому они ветвятся от ветки по умолчанию вашего репозитория, если только worktree.baseRef не установлен на "head".

Очистка worktrees subagent и фоновых сеансов

Claude Code запускает периодическую очистку, которая удаляет worktrees, которые Claude создал для subagents и фоновых сеансов, как только они становятся старше вашего параметра cleanupPeriodDays, следуя правилам очистки. Когда вы отправляете в фон сеанс --worktree, его worktree становится worktree фонового сеанса, который очистка может удалить. Очистка оставляет worktree на месте в этих случаях:
  • Worktree по-прежнему содержит работу: изменённые или неотслеживаемые файлы или неотправленные коммиты.
  • Проверенный submodule в worktree содержит изменённые или неотслеживаемые файлы, или Claude Code не может проверить submodules worktree. Эта проверка требует Claude Code v2.1.274 или более позднюю версию.
  • Один из четырёх случаев, которые также блокируют создание worktree применяется: Claude Code не может определить, какие драйверы фильтров определяет конфигурация репозитория, или находит там параметр, который не может отключить.
  • Worktree принадлежит сеансу --worktree, который вы не отправили в фон, независимо от его возраста.
  • Вы создали worktree самостоятельно с git worktree add, даже если вы затем запустили сеанс --worktree <name> в нём и отправили этот сеанс в фон.
Claude Code записывает маркер в метаданные git каждого worktree, который он создаёт с git, и очистка сохраняет любой worktree без него, включая worktree, который создал hook WorktreeCreate. До версии 2.1.246 очистка не проверяла маркер и могла удалить worktree, который вы создали самостоятельно, когда старая запись фонового сеанса указывала на него. Пока агент работает, Claude Code держит git worktree lock на его worktree, чтобы одновременная очистка не могла его удалить, и освобождает блокировку, когда агент завершает работу. Claude Code держит ту же блокировку на worktree, который он создал для фонового сеанса, пока сеанс работает, поэтому очистка оставляет worktree на месте и git worktree remove отказывает его удалить. Очистка также освобождает блокировку, которую Claude Code установил для сеанса, чей процесс завершился, поэтому убитый фоновый сеанс не оставляет его worktree постоянно заблокированным. Очистка никогда не освобождает блокировку, которую вы установили самостоятельно с git worktree lock. До версии 2.1.210 блокировка, оставленная убитым сеансом, оставалась на месте до тех пор, пока вы не запустили git worktree unlock. Чтобы очистить worktree, который очистка сохраняет, запустите git worktree remove, добавив --force, если worktree содержит неотправленные изменения или неотслеживаемые файлы. Если git отказывает, потому что worktree заблокирован, сначала запустите git worktree unlock на нём.

Настройте создание worktree

Значения по умолчанию Claude Code для создания worktrees охватывают большинство сеансов: он создаёт их в .claude/worktrees/, ветвит их от ветки по умолчанию вашего репозитория и проверяет только отслеживаемые файлы. Параметры в этом разделе изменяют эти значения по умолчанию.

Выберите базовую ветку

Новые worktrees ветвятся от ветки по умолчанию репозитория, поэтому большинству сеансов это не нужно. Установите worktree.baseRef в settings, чтобы ветвиться от вашей текущей работы. Параметр принимает два значения:
  • "fresh" (по умолчанию): ветвиться от ветки по умолчанию репозитория на удалённом сервере, обычно main, поэтому worktree начинается с чистого дерева, соответствующего удалённому серверу.
  • "head": ветвиться от вашей текущей локальной HEAD, поэтому worktree несёт ваши неотправленные коммиты и состояние ветки функции. Используйте это при изоляции subagents, которым нужно работать с незавершённой работой. Внутри worktree "head" разрешается в HEAD этого worktree, а не в основной копии.
Вы не можете установить worktree.baseRef на имя ветки. Чтобы запустить worktree из конкретной существующей ветки, создайте его с git напрямую. Для базы "fresh" Claude Code сохраняет origin/HEAD актуальным: когда репозиторий не был загружен в течение последних 24 часов, он загружает ветку по умолчанию, ограниченную пятью секундами, и использует локально кэшированный ref, если загрузка не удалась. Если удалённый сервер не настроен или origin/HEAD не кэширован локально и не может быть загружен, worktree переходит на вашу текущую локальную HEAD. До версии 2.1.208 свежий worktree использовал то, что уже было кэшировано локально в origin/HEAD. Этот пример делает каждый новый worktree ветвящимся от вашей текущей работы:

Ветвиться от pull request

Чтобы ветвиться от конкретного pull request или merge request, передайте --worktree номер с префиксом #, URL GitHub pull request или URL GitLab merge request, такой как https://gitlab.com/group/repo/-/merge_requests/123. Claude Code загружает коммит head этого изменения из origin и создаёт worktree в .claude/worktrees/pr-<number>. Заключите аргумент в кавычки, чтобы ваша оболочка не рассматривала # как начало комментария:
Claude Code читает только номер из URL. Он всегда загружает из удалённого сервера origin вашего репозитория и выбирает путь загрузки по хосту origin:
  • github.com: загружает pull/<number>/head
  • gitlab.com: загружает merge-requests/<number>/head
  • GitHub Enterprise, самоуправляемый GitLab или любой другой хост: сначала пытается pull/<number>/head, затем merge-requests/<number>/head
До версии 2.1.233 Claude Code принимал только #<number> и URL GitHub pull request для --worktree и всегда загружал pull/<number>/head.

Скопируйте игнорируемые git файлы в worktrees

Worktree — это свежая копия, поэтому неотслеживаемые файлы, такие как .env или .env.local из вашего основного репозитория, отсутствуют. Чтобы скопировать их автоматически при создании Claude worktree, добавьте файл .worktreeinclude в корень вашего проекта. Файл использует синтаксис .gitignore. Копируются только файлы, которые соответствуют шаблону и также игнорируются git, поэтому отслеживаемые файлы никогда не дублируются. Если вы напишете шаблон, который начинается с **/, и файлы, которые вам нужны, находятся внутри каталога, который игнорируется как целое, Claude Code копирует их только когда этот каталог сам соответствует шаблону, или когда первое имя после **/ — одно из имён в пути каталога. Например, если вы напишете **/.claude/skills/*.md, это первое имя — .claude, поэтому Claude Code копирует соответствующие файлы из игнорируемого каталога .claude/. Чтобы скопировать файлы из игнорируемого каталога, который шаблон **/ не достигает, назовите каталог в шаблоне вместо этого: напишите vendor/**/config.json вместо **/config.json. До версии 2.1.239 Claude Code копировал файлы из полностью игнорируемого каталога для шаблона **/ только когда сам каталог соответствовал шаблону. Этот .worktreeinclude копирует два файла env и конфиг секретов в каждый новый worktree:
.worktreeinclude
Это применяется к каждому worktree, который Claude Code создаёт с git: worktrees --worktree, worktrees subagent и параллельные сеансы в десктопном приложении. С hook WorktreeCreate скопируйте файлы внутри скрипта hook.

Повторное использование имени worktree

Передача --worktree имени, чей каталог уже существует, открывает этот существующий worktree вместо создания нового. С базой "fresh" по умолчанию base, повторно открытый worktree переходит к ветке по умолчанию репозитория вместо продолжения на его старой вершине, когда выполняются все следующие условия:
  • Он не имеет неотправленных изменений или неотслеживаемых файлов.
  • Он по-прежнему находится на ветке, которую создал Claude Code.
  • Он не имеет собственных коммитов, или его pull request или merge request был объединён и его удалённая ветка удалена.
Claude Code обнаруживает объединённый случай только из состояния git: удалённая ветка, на которую ветвился worktree, больше не существует, и каждый коммит в worktree уже находится на ветке по умолчанию. Во всех остальных случаях Claude Code повторно открывает worktree на его старой вершине:
  • Worktree не проходит любое из условий.
  • Claude Code не может проверить состояние worktree.
  • worktree.baseRef — это "head".
  • Имя — это ссылка на pull request или merge request.
До версии 2.1.208, когда вы повторно использовали имя, Claude Code всегда повторно открывал старый worktree на его старой вершине.

Замените создание worktree hook

Настройте hook WorktreeCreate, чтобы полностью заменить логику git worktree по умолчанию, включая размещение worktrees где-то другом, чем .claude/worktrees/. Для полного примера см. Не-git системы контроля версий.

Что worktrees делят с основной копией

Worktree получает собственные файлы и ветку, но делит следующее с основной копией:
  • Каталог .git репозитория: команды git в worktree записывают в общий каталог .git основного репозитория, и sandboxing позволяет эти записи, поэтому команды, такие как git commit, работают из worktree с включённой песочницей.
  • Плагины: плагины, установленные в области проекта из основной копии, также загружаются в worktrees того же репозитория, поэтому вам не нужно переустанавливать их для каждого worktree. Требуется Claude Code версии 2.1.200 или позже.
  • Одобрения разрешений: выбор “Да, и больше не спрашивать” для команды Bash в сеансе worktree сохраняет правило в .claude/settings.local.json основной копии, поэтому оно применяется в основной копии и в каждом другом worktree репозитория, и оно выживает удаление worktree. На Windows и в других случаях, когда Claude Code не использует корень репозитория, правило остаётся с этим worktree. До версии 2.1.211 одобрение, предоставленное в worktree, было сохранено внутри этого worktree, не применялось в другом месте и было потеряно при удалении worktree. См. где сохраняются одобрения.
  • Неотслеживаемые skills, agents и commands: когда копия worktree не имеет каталога .claude/skills в своём корне, например потому что ваш .claude/skills находится в gitignore, Claude Code загружает project skills основной копии в сеансе worktree. В worktree с собственным каталогом .claude/skills загружается только эта копия. То же самое применяется к .claude/agents и .claude/commands. Для skills это требует Claude Code версии 2.1.277 или позже.
Все это применяется независимо от того, создаёте ли вы worktree с --worktree, с git worktree add или через десктопное приложение.

Управляйте worktrees вручную

Создавайте worktrees с Git напрямую, когда вам нужно извлечь конкретную существующую ветку или поместить worktree вне репозитория. Создайте worktree на новой ветке:
Создайте worktree из существующей ветки, заменив fix-issue-456 веткой, которая уже существует в вашем репозитории:
Запустите Claude в worktree:
Перечислите ваши worktrees:
Удалите один, когда вы с ним закончите:
Полный справочник команд см. в документации Git worktree.

Не-git системы контроля версий

Изоляция worktrees использует git по умолчанию. Для SVN, Perforce, Mercurial или других систем настройте hooks WorktreeCreate и WorktreeRemove, чтобы предоставить пользовательскую логику создания и очистки. Поскольку hook заменяет поведение git по умолчанию, .worktreeinclude не обрабатывается при использовании --worktree. Скопируйте любые локальные файлы конфигурации внутри вашего скрипта hook вместо этого. Этот hook WorktreeCreate читает имя worktree из JSON на stdin с jq, проверяет свежую рабочую копию SVN и выводит путь каталога, чтобы Claude Code мог использовать его как рабочий каталог сеанса. Добавьте конфигурацию в ваш settings.json:
Объедините его с hook WorktreeRemove для очистки при завершении сеанса. Схему входных данных и пример удаления см. в справочнике hooks. Hook WorktreeCreate также позволяет запускать /batch вне репозитория git. Каждый подагент /batch затем публикует свое изменение с помощью команд контроля версий вашего проекта и, когда он не может открыть pull request, сообщает о том, что он опубликовал вместо этого. Запуск /batch вне репозитория git требует Claude Code v2.1.281 или более поздней версии.

Устранение неполадок

Claude Code сообщает об ошибках ниже, когда он создаёт worktree, входит в один при запуске или возвращает возобновленный сеанс в один.

Claude Code не может войти в worktree при запуске

Когда Claude Code не может войти в каталог worktree при запуске, он выводит ошибку с указанием пути и завершается с кодом 1. Это может произойти, когда hook WorktreeCreate выводит что-то другое, чем каталог, который он создал, или когда каталог был удалён после его настройки.

Создание worktree не удаётся на символической ссылке

Claude Code отказывает создавать worktree, когда .claude, .claude/worktrees или сам каталог worktree — это символическая ссылка, и ошибка называет символически связанный путь. Удалите символическую ссылку и повторите попытку. До версии 2.1.212, если репозиторий уже содержал зафиксированную символическую ссылку в одном из этих путей, создание worktree следовало ей и могло создавать файлы вне репозитория.

Файлы Git LFS — это файлы указателей в worktree, который создал Claude Code

Если вы настроили Git LFS с git lfs install --local, worktree, который создаёт Claude Code, содержит файлы указателей LFS вместо реальных файлов. Флаг --local записывает фильтр LFS в собственный .git/config репозитория, а не в вашу глобальную конфигурацию git. Простой git lfs install записывает в вашу глобальную конфигурацию и не затронут. То же самое применяется к любому другому драйверу фильтра, определённому в собственной конфигурации репозитория. Claude Code пропускает драйверы фильтров репозитория при создании worktree, потому что драйвер фильтра — это команда оболочки, и всё, что может писать в репозиторий, включая Claude, могло поместить его туда. До версии 2.1.247 Claude Code запускал эти драйверы во время создания worktree. Чтобы получить реальные файлы, запустите git lfs pull внутри worktree. В четырёх редких случаях Claude Code вообще не создаёт worktree: он не может определить, какие драйверы фильтров определяет конфигурация репозитория, или он находит там параметр, который не может отключить. Сопоставьте ошибку с её исправлением:
  • Could not read the repository git config to neutralize filter drivers: Claude Code не мог прочитать .git/config репозитория, например из-за его разрешений. Исправьте это и повторите попытку.
  • The repository git config defines a filter driver whose name cannot be neutralized (contains "=" or a newline): переименуйте или удалите этот драйвер фильтра в .git/config и повторите попытку.
  • The repository git config has a conditional include (includeIf): переместите параметры, которые includeIf в .git/config вытягивает, непосредственно в этот файл, удалите includeIf и повторите попытку. includeIf в вашей глобальной конфигурации git не вызывает это.
  • Git was not run: the repository's own git config sets <key>: сообщение называет ключ, который указывает Git LFS на программу для запуска, такую как lfs.customtransfer.<name>.path или lfs.standalonetransferagent. Если этот параметр ваш, переместите его в вашу глобальную конфигурацию git. Если вы его не узнаёте, удалите его из конфигурации репозитория, так как инструмент или checkout, которому вы не доверяете, мог его написать. Повторите попытку, когда ключ исчезнет из конфигурации репозитория.

Claude Code отказывается использовать worktree

Ошибка, начинающаяся с Refusing to use <path> as an isolation worktree, означает, что Claude Code проверил идентичность git каталога перед его принятием как изолированной копии сеанса или subagent и отказал. Проверка выполняется независимо от того, создаёт ли Claude Code worktree, входит в существующий или повторно использует один из более раннего запуска. В большинстве случаев остальная часть сообщения говорит, что метаданные git каталога разрешаются в основную копию: например, его файл .git указывает на собственный каталог .git основного репозитория, или git разрешает его рабочее дерево в основную копию через перенаправление core.worktree. Из такого каталога обычная команда git, такая как git reset --hard, будет действовать на основную копию вместо worktree. Claude Code также отказывает, когда каталог имеет запись .git, которую он не может прочитать, вместо предположения, что worktree безопасен. Каталог без метаданных git вообще, такой как тот, который создаёт ваш hook WorktreeCreate, проходит проверку только когда никакой git-репозиторий его не содержит. Если hook создаёт каталог внутри репозитория, git разрешает его в копию этого репозитория и Claude Code отказывает его с сообщением git resolves its working tree to, поэтому пусть hook создаёт свои каталоги вне любого репозитория. Claude Code оставляет отказанный каталог на месте, так как он может содержать работу. Сопоставьте сообщение с его восстановлением, появляется ли оно после Refusing to use <path> или в сообщении возобновления; некоторые окончания встречаются только в сообщениях возобновления:
  • Говорит launch from the parent checkout или Run the resume from the project checkout: вы запустили Claude Code из worktree. Запустите из основной копии вместо этого; worktree не нуждается в пересоздании.
  • Говорит it cannot be resumed or re-entered: ничто в этом сеансе не поручается за worktree из того места, где вы запустили. Пересоздайте его; каталог и его работа остаются на диске для ручного восстановления, и когда worktree имеет родительскую копию, возобновление оттуда также работает.
  • Говорит it contains the protected checkout: отказанный каталог — это родитель вашей основной копии, такой как ваш домашний каталог. Не удаляйте его. Измените путь worktree, такой как путь, который возвращает ваш hook WorktreeCreate или цель EnterWorktree, чтобы worktree не содержал копию.
  • Говорит the protected checkout <path> has a .git entry that could not be examined или has git metadata that could not be resolved: проблема в метаданных git основной копии, а не worktree. Не удаляйте worktree и игнорируйте совет сообщения в конце пересоздать его, который не применяется к этим двум окончаниям. Отремонтируйте основную копию, например проблему разрешений или отказ git dubious ownership на её .git, и повторите попытку.
  • Говорит its recorded path has a network spelling: Claude Code никогда не возобновляет в worktree по сетевому пути. Пересоздайте worktree по локальному пути.
  • Любое другое окончание: сообщение называет проблему и её исправление, такое как удаление перенаправления core.worktree или пересоздание worktree; следуйте ему. Перед удалением каталога, чьё сообщение говорит, что его идентичность git не может быть проверена, сначала решите названную причину, например символическую ссылку в пути worktree или сам git, отказывающийся работать, так как каталог может быть здоров. Когда вы пересоздаёте, сначала спасите любые изменения, которые вам нужны, из старого каталога; он остаётся на диске.

Сеанс возобновляется вне его worktree

Когда вы возобновляете сеанс интерактивно и Claude Code не может вернуть его в его worktree, Claude Code говорит об этом одним из сообщений ниже. Когда Claude Code очищает привязку worktree, он записывает очистку в стенограмму сеанса. Если вы подавляете записи стенограммы, сообщение вместо этого говорит, что привязка не может быть очищена и что Claude Code повторно проверит worktree при более позднем возобновлении. В неинтерактивном режиме с -p и при возобновлениях, которые запускает Agent SDK, Claude Code останавливает возобновление с ошибкой stderr для каждого отказа, кроме исчезнувшего worktree, вместо продолжения без изоляции. С --output-format stream-json, отказ также поступает на stdout как сообщение result с подтипом error_during_execution, чей массив errors несёт тот же текст, поэтому приложение Agent SDK получает причину, а не только ненулевой выход. До версии 2.1.260 отказ возобновления worktree не производил сообщение result. Сообщения принимают разные формы от интерактивных сообщений в таблице:
  • Error: cannot resume into worktree <path>: ...This session was not started. для отказа, который таблица показывает как Did not re-enter. Claude Code очищает привязку worktree перед выходом, и ошибка говорит об этом; в следующий раз, когда вы возобновите разговор, сеанс продолжается в текущем каталоге без изоляции worktree. До версии 2.1.260 Claude Code не писал очищенную привязку, поэтому каждая повторная попытка того же возобновления не удалась с той же ошибкой. Если вы подавляете записи стенограммы, очистка не может быть сохранена. Ошибка затем говорит, что та же команда будет отказана снова, и называет --fork-session и запуск нового разговора как способы продолжить без worktree.
  • Error: could not verify worktree <path> for this resume, so the resume was aborted... для Could not verify
  • Error: ...The worktree binding is kept. для Could not re-enter
  • Notice: the worktree <path> for this session no longer exists... для исчезнувшего worktree; Claude Code выводит его и продолжает сеанс, как интерактивное возобновление это делает
Окончание отказа, встроенное в каждую ошибку, делится с интерактивными уведомлениями, поэтому оно по-прежнему сопоставляется с его записью в разделе Claude Code отказывается использовать worktree. В результате stream-json startup_failure_reason — это worktree_unverified для ошибки could not verify worktree и worktree_resume_refused для ошибок cannot resume into worktree и The worktree binding is kept. Приложение может ветвиться на нём вместо сопоставления текста ошибки. До версии 2.1.274 результат не содержал поле startup_failure_reason.

См. также

Worktrees обрабатывают изоляцию файлов. Связанные страницы ниже охватывают делегирование работы в эти изолированные копии, передачу результатов между ними и переключение между созданными вами сеансами:
  • Subagents: делегируйте работу изолированным агентам внутри сеанса
  • Cross-session messaging: позвольте сеансам в ваших worktrees передавать результаты друг другу
  • Agent teams: координируйте несколько сеансов Claude автоматически
  • Manage sessions: назовите, возобновите и переключайтесь между беседами
  • Desktop parallel sessions: сеансы на основе worktree в десктопном приложении