Worktrees требуют git-репозитория; для других систем контроля версий настройте hooks для замены логики git. В десктопном приложении выберите опцию worktree при запуске сеанса, чтобы дать ему собственный worktree.
Запустите Claude в worktree
Передайте--worktree или -w с именем, чтобы создать изолированный worktree и запустить Claude в нём. По умолчанию worktree создаётся в .claude/worktrees/<name>/ в корне вашего репозитория на новой ветке с именем worktree-<name>:
bright-running-fox.
Интерактивные запуски требуют доверия рабочей области: если вы ещё не запускали Claude в этом каталоге, запустите claude один раз там, чтобы принять диалог доверия, или --worktree завершится с ошибкой, предлагая вам это сделать. Неинтерактивные запуски с -p пропускают проверку доверия, поэтому claude -p --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 для выхода./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, как переписать отказанную команду, например разделив её на простые отдельные команды. Вы не можете отключить эту проверку.
Изолируйте subagents с помощью worktrees
Subagents могут работать в собственных worktrees, чтобы параллельные правки не конфликтовали. Попросите Claude “использовать worktrees для ваших агентов” или сделайте изоляцию постоянной для пользовательского subagent, добавивisolation: worktree в frontmatter.
Этот subagent в .claude/agents/ всегда работает в собственном worktree:
--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>в нём и отправили этот сеанс в фон.
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>. Заключите аргумент в кавычки, чтобы ваша оболочка не рассматривала # как начало комментария:
origin вашего репозитория и выбирает путь загрузки по хосту origin:
- github.com: загружает
pull/<number>/head - gitlab.com: загружает
merge-requests/<number>/head - GitHub Enterprise, самоуправляемый GitLab или любой другой хост: сначала пытается
pull/<number>/head, затемmerge-requests/<number>/head
#<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, worktrees subagent и параллельные сеансы в десктопном приложении. С hook WorktreeCreate скопируйте файлы внутри скрипта hook.
Повторное использование имени worktree
Передача--worktree имени, чей каталог уже существует, открывает этот существующий worktree вместо создания нового.
С базой "fresh" по умолчанию base, повторно открытый worktree переходит к ветке по умолчанию репозитория вместо продолжения на его старой вершине, когда выполняются все следующие условия:
- Он не имеет неотправленных изменений или неотслеживаемых файлов.
- Он по-прежнему находится на ветке, которую создал Claude Code.
- Он не имеет собственных коммитов, или его pull request или merge request был объединён и его удалённая ветка удалена.
- Worktree не проходит любое из условий.
- Claude Code не может проверить состояние worktree.
worktree.baseRef— это"head".- Имя — это ссылка на pull request или merge request.
Замените создание worktree hook
Настройте hookWorktreeCreate, чтобы полностью заменить логику 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, с git worktree add или через десктопное приложение.
Управляйте worktrees вручную
Создавайте worktrees с Git напрямую, когда вам нужно извлечь конкретную существующую ветку или поместить worktree вне репозитория. Создайте worktree на новой ветке:fix-issue-456 веткой, которая уже существует в вашем репозитории:
Не-git системы контроля версий
Изоляция worktrees использует git по умолчанию. Для SVN, Perforce, Mercurial или других систем настройте hooksWorktreeCreate и WorktreeRemove, чтобы предоставить пользовательскую логику создания и очистки. Поскольку hook заменяет поведение git по умолчанию, .worktreeinclude не обрабатывается при использовании --worktree. Скопируйте любые локальные файлы конфигурации внутри вашего скрипта hook вместо этого.
Этот hook WorktreeCreate читает имя worktree из JSON на stdin с jq, проверяет свежую рабочую копию SVN и выводит путь каталога, чтобы Claude Code мог использовать его как рабочий каталог сеанса. Добавьте конфигурацию в ваш settings.json:
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. Это может произойти, когда hookWorktreeCreate выводит что-то другое, чем каталог, который он создал, или когда каталог был удалён после его настройки.
Создание 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, такой как путь, который возвращает ваш hookWorktreeCreateили цель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 и игнорируйте совет сообщения в конце пересоздать его, который не применяется к этим двум окончаниям. Отремонтируйте основную копию, например проблему разрешений или отказ gitdubious 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 выводит его и продолжает сеанс, как интерактивное возобновление это делает
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 в десктопном приложении