Worktrees erfordern ein Git-Repository; für andere Versionskontrollsysteme konfigurieren Sie Hooks, um die Git-Logik zu ersetzen. In der Desktop-App wählen Sie die Option worktree aus, wenn Sie eine Sitzung starten, um ihr ihren eigenen Worktree zu geben.
Starten Sie Claude in einem Worktree
Übergeben Sie--worktree oder -w mit einem Namen, um einen isolierten Worktree zu erstellen und Claude darin zu starten. Standardmäßig wird der Worktree unter .claude/worktrees/<name>/ in Ihrem Repository-Root erstellt, auf einem neuen Branch namens worktree-<name>:
bright-running-fox.
Interaktive Ausführungen erfordern Workspace-Vertrauen: Wenn Sie Claude in dem Verzeichnis noch nicht ausgeführt haben, führen Sie claude einmal dort aus, um den Vertrauensdialog zu akzeptieren, oder --worktree beendet sich mit einem Fehler, der Sie dazu auffordert. Nicht-interaktive Ausführungen mit -p überspringen die Vertrauensprüfung, sodass claude -p --worktree ohne diese fortfährt.
Richten Sie die Worktree-Umgebung ein
Ein Worktree ist ein frischer Checkout, daher initialisieren Sie Ihre Entwicklungsumgebung dort: Bitten Sie Claude, Abhängigkeiten zu installieren, oder führen Sie die Einrichtung Ihres Projekts selbst im Worktree-Verzeichnis unter.claude/worktrees/ durch. Um gitignorierte Dateien wie .env automatisch in jeden neuen Worktree zu tragen, fügen Sie eine .worktreeinclude-Datei hinzu.
Bitten Sie Claude, einen Worktree zu erstellen
Sie können Claude auch während einer Sitzung bitten, „in einem Worktree zu arbeiten”, und es erstellt einen mit demEnterWorktree-Tool. Sobald Sie sich in einem Worktree befinden, kann Claude direkt zu einem anderen unter .claude/worktrees/ wechseln, indem er EnterWorktree mit dem Zielpfad aufruft; der vorherige Worktree bleibt unverändert auf der Festplatte.
Wenn Claude einen Pfad außerhalb des Verzeichnisses .claude/worktrees/ des Repositories betritt, fragt Claude Code zunächst nach Ihrer Genehmigung, da der Wechsel das Arbeitsverzeichnis der Sitzung, den Schreibzugriff und die Projektkonfiguration wie CLAUDE.md und Einstellungen an diesen Ort verschiebt. Eine EnterWorktree-Berechtigung oder die Wahl von „nicht mehr fragen” unterdrückt diese Aufforderung nicht; nur der bypassPermissions-Modus überspringt sie. Vor v2.1.206 konnte Claude jeden vorhandenen Worktree-Pfad ohne Nachfrage betreten.
Hook-Pfade folgen dem Worktree nicht. Nachdem Claude einen Worktree betritt, behält Claude Code
${CLAUDE_PROJECT_DIR} in Ihren Hooks dort, wo er war, und übergibt den Worktree-Pfad auf andere Weise:${CLAUDE_PROJECT_DIR}bleibt an Ort und Stelle: Es zeigt immer noch auf das Projekt-Root, wo die Sitzung gestartet wurde, sodass ein Hook-Befehl wie${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.shdas Skript immer noch im Haupt-Checkout ausführt.cwdfolgt Claude: Das Feldcwdin der Hook-Eingabe-JSON ist das Worktree-Root, und es bewegt sich erneut, wenn Claudecdausführt. Lesen Sie es, wenn ein Hook den Worktree-Pfad benötigt.
Bereinigen Sie Worktrees
Wenn Sie eine interaktive Worktree-Sitzung beenden, prüft Claude den Worktree auf Arbeit, die durch das Entfernen gelöscht würde: geänderte oder nicht verfolgte Dateien, nicht committete Arbeit in ausgecheckten Submodulen und neue Commits.- Der Worktree ist sauber: Für eine unbenannte Sitzung entfernt Claude den Worktree und seinen Branch automatisch. Eine benannte Sitzung fordert Sie zunächst auf, damit Sie den Worktree später behalten können
- Der Worktree enthält Arbeit: Claude fordert Sie auf, den Worktree zu behalten oder zu entfernen. Das Behalten bewahrt das Verzeichnis und den Branch, sodass Sie später zurückkehren können. Das Entfernen löscht das Worktree-Verzeichnis und seinen Branch zusammen mit der gesamten Arbeit darin
- Der Zustand des Worktrees kann nicht überprüft werden: Wenn Claude Code die Änderungen des Worktrees nicht zählen kann oder seine Submodul-Checkouts nicht überprüfen kann, fordert es Sie auf, anstatt den Worktree automatisch zu entfernen. Die Aufforderung benennt, was nicht überprüft werden konnte
-p haben keine Exit-Aufforderung, sodass Claude ihre Worktrees nicht bereinigt, und Claude Code hinterlässt die Sperre, die es bei der Erstellung auf jedem genommen hat, bis eine spätere Sitzung stale-lock sweep sie freigeben kann. Um einen zu entfernen, führen Sie git worktree remove aus; wenn Git sich weigert, weil der Worktree gesperrt ist, führen Sie zuerst git worktree unlock darauf aus.
Unter Windows löscht das Entfernen eines Worktrees keine Dateien außerhalb davon. Wenn ein Ordner im Worktree ein Link zu anderswo ist, wie eine NTFS-Junction oder ein Verzeichnis-Symlink, löscht Claude Code nur den Link und behält den Ordner, auf den er verweist. Vor v2.1.205 konnte das Entfernen eines Worktrees mit einem Link in einem Unterverzeichnis den Ordner löschen, auf den er verweist.
Setzen Sie eine Worktree-Sitzung fort
Wenn Sie eine Sitzung fortsetzen, die sich in einem Worktree befand, kehrt Claude Code die Sitzung zu diesem Worktree zurück. Dies gilt für interaktive Fortsetzungen, für--continue und --resume im nicht-interaktiven Modus mit -p, und für das Agent SDK. Zurück im Worktree kann Claude ihn immer noch mit dem ExitWorktree-Tool verlassen.
Bevor Claude Code die Sitzung zu ihrem Worktree zurückbringt, überprüft es, dass der Worktree immer noch ein separater Checkout vom Haupt-Checkout ist, und lehnt es ab, einen Worktree erneut zu betreten, der die Prüfung nicht besteht. Für einen Git-Worktree liest die Prüfung seine Git-Metadaten. Ein Worktree ohne Git-Metadaten, wie einer, den ein WorktreeCreate-Hook erstellt hat, kann die Prüfung bestehen; die Fälle, die Claude Code immer noch ablehnt, sind unter Claude Code weigert sich, einen Worktree zu verwenden mit ihren Wiederherstellungen aufgelistet. Für die Meldungen und wie Sie sich von jedem erholen, siehe Die Sitzung wird außerhalb ihres Worktrees fortgesetzt.
Wo Sie starten und wie Sie fortsetzen, ändern, was Claude Code erneut betritt:
- Startverzeichnis: Fortsetzen vom Haupt-Checkout oder einem anderen Verzeichnis des Repositories. Claude Code betritt einen Worktree, den es mit Git unter
.claude/worktrees/erstellt hat, auch wenn Sie von innen starten. Wenn Sie von innen in einem anderen Worktree starten, betritt Claude Code ihn nur, wenn es ihn von dort aus garantieren kann: ein Worktree, der sein eigenes Repository ist, einer ohne Git-Metadaten, oder ein Start aus einem Unterverzeichnis eines Worktrees, den Sie mitgit worktree adderstellt haben, lehnt ab, daher starten Sie diese vom Haupt-Checkout. --fork-session: Die abgespaltene Sitzung startet in dem Verzeichnis, von dem aus Sie Claude gestartet haben, und Claude Code hinterlässt den Worktree der ursprünglichen Sitzung unverändert.- Gelöschter Worktree: Wenn das Worktree-Verzeichnis nicht mehr existiert, setzt Claude Code die Sitzung in dem Verzeichnis fort, von dem aus Sie Claude gestartet haben. Es teilt Ihnen mit, dass der Worktree weg ist, und löscht die Worktree-Bindung der Sitzung.
Vor v2.1.212 blieb eine nicht-interaktive Fortsetzung im Startverzeichnis und
ExitWorktree meldete, dass es keine aktive Worktree-Sitzung zum Beenden gab./cd, sodass /desktop und --resume sie dort finden. Das Verlassen verschiebt es auf die gleiche Weise zurück. Ein Worktree, der von einem WorktreeCreate-Hook erstellt wurde, behält sein Transkript im Startverzeichnis. Erfordert Claude Code v2.1.198 oder später.
Wie Claude Code Isolation erzwingt
Während eine Sitzung in einem Worktree isoliert ist, blockiert Claude Code die Tool-Aufrufe, die die folgenden Prüfungen definieren. Die gleichen Regeln gelten, ob Sie die Sitzung mit--worktree gestartet haben, Claude einen Worktree mit EnterWorktree betritt, oder Sie eine Worktree-Sitzung fortsetzen.
Die gleiche Erzwingung gilt für jeden Subagent, den Claude aus der isolierten Sitzung erzeugt. Sie gilt, ob die Sitzung interaktiv ist oder im Hintergrund läuft. Subagents, die in ihrem eigenen Worktree laufen, tragen die gleichen Prüfungen. Ihre Versionsverlauf ist unter Schreiben Sie Subagent-Dateien.
Claude Code wendet vier Prüfungen an:
- Datei-Änderungen: Claude Code blockiert einen
Edit,WriteoderNotebookEdit, der auf einen Pfad im Haupt-Checkout abzielt. - Befehl-Arbeitsverzeichnis: Claude Code blockiert einen Bash-, PowerShell- oder Monitor-Befehl, dessen Arbeitsverzeichnis zum Haupt-Checkout aufgelöst wird, oder dessen Arbeitsverzeichnis es nicht überprüfen kann, dass es außerhalb bleibt.
- Git-Umleitungen: Claude Code blockiert einen Bash- oder Monitor-Befehl, der Git in den Haupt-Checkout umleitet. Die Umleitung kann durch
git -C,--git-dir, eineGIT_DIR- oderGIT_WORK_TREE-Variable oder eincdin den Haupt-Checkout vor dem Ausführen von Git erfolgen. - Befehlsform: Claude Code blockiert einen Bash- oder Monitor-Befehl, wenn es nicht überprüfen kann, dass jedes Git, das der Befehl ausführt, im Worktree bleibt. Das geschieht beispielsweise, wenn der Befehlsname zur Laufzeit berechnet wird, wenn die Syntax nicht analysiert werden kann, oder wenn eine Erweiterung wie
${!name}oder${ command; }einen Befehl ausführen könnte, den der Text nicht ausdrücklich angibt. Claude Code teilt Claude mit, wie der abgelehnte Befehl umgeschrieben werden kann, z. B. durch Aufteilen in einfache, separate Befehle. Sie können diese Prüfung nicht ausschalten.
Isolieren Sie Subagents mit Worktrees
Subagents können in ihren eigenen Worktrees laufen, sodass parallele Änderungen nicht kollidieren. Bitten Sie Claude, „Worktrees für Ihre Agenten zu verwenden”, oder machen Sie die Isolation dauerhaft für einen benutzerdefinierten Subagent, indem Sieisolation: worktree zu seinem Frontmatter hinzufügen.
Dieser Subagent in .claude/agents/ läuft immer in seinem eigenen Worktree:
--worktree, sodass sie von dem Standard-Branch Ihres Repositories verzweigen, es sei denn, worktree.baseRef ist auf "head" gesetzt.
Bereinigen Sie Subagent- und Hintergrund-Sitzungs-Worktrees
Claude Code führt eine periodische Bereinigung durch, die Worktrees entfernt, die Claude für Subagents und Hintergrund-Sitzungen erstellt hat, sobald sie älter als IhrecleanupPeriodDays-Einstellung sind, nach den Aufbewahrungsbereinigungsregeln.
Wenn Sie eine --worktree-Sitzung in den Hintergrund verschieben, wird ihr Worktree zu einem Hintergrund-Sitzungs-Worktree, den die Bereinigung entfernen kann. Die Bereinigung hinterlässt einen Worktree in diesen Fällen:
- Der Worktree hält immer noch Arbeit: geänderte oder nicht verfolgte Dateien oder nicht gepushte Commits.
- Ein ausgechecktes Submodul im Worktree hält geänderte oder nicht verfolgte Dateien, oder Claude Code kann die Submodule des Worktrees nicht inspizieren. Diese Überprüfung erfordert Claude Code v2.1.274 oder später.
- Einer der vier Fälle, die auch die Worktree-Erstellung blockieren trifft zu: Claude Code kann nicht bestimmen, welche Filter-Treiber die Repository-Konfiguration definiert, oder findet dort eine Einstellung, die es nicht ausschalten kann.
- Der Worktree gehört zu einer
--worktree-Sitzung, die Sie nicht in den Hintergrund verschoben haben, unabhängig von seinem Alter. - Sie haben den Worktree selbst mit
git worktree adderstellt, auch wenn Sie dann eine--worktree <name>-Sitzung darin ausgeführt und diese Sitzung in den Hintergrund verschoben haben.
WorktreeCreate-Hook erstellt hat. Vor v2.1.246 prüfte die Bereinigung nicht auf den Marker und konnte einen Worktree entfernen, den Sie selbst erstellt haben, wenn ein alter Hintergrund-Sitzungs-Datensatz darauf verweist.
Während ein Agent läuft, hält Claude Code eine git worktree lock auf seinem Worktree, sodass gleichzeitige Bereinigung ihn nicht entfernen kann, und gibt die Sperre frei, wenn der Agent beendet wird. Claude Code hält die gleiche Sperre auf dem Worktree, den es für eine Hintergrund-Sitzung erstellt hat, während die Sitzung läuft, sodass die Bereinigung den Worktree an Ort und Stelle hinterlässt und git worktree remove sich weigert, ihn zu entfernen.
Die Bereinigung gibt auch eine Sperre frei, die Claude Code für eine Sitzung gesetzt hat, deren Prozess beendet wurde, sodass eine getötete Hintergrund-Sitzung ihren Worktree nicht dauerhaft gesperrt hinterlässt. Die Bereinigung gibt niemals eine Sperre frei, die Sie selbst mit git worktree lock gesetzt haben. Vor v2.1.210 blieb eine Sperre, die von einer getöteten Sitzung hinterlassen wurde, an Ort und Stelle, bis Sie git worktree unlock ausgeführt haben.
Um einen Worktree zu bereinigen, den die Bereinigung behält, führen Sie git worktree remove aus und fügen Sie --force hinzu, wenn der Worktree nicht committete Änderungen oder nicht verfolgte Dateien hat. Wenn Git sich weigert, weil der Worktree gesperrt ist, führen Sie zuerst git worktree unlock darauf aus.
Passen Sie die Worktree-Erstellung an
Die Standardwerte von Claude Code für die Erstellung von Worktrees decken die meisten Sitzungen ab: Es erstellt sie unter.claude/worktrees/, verzweigt sie vom Standard-Branch Ihres Repositories und checkt nur verfolgte Dateien aus. Die Optionen in diesem Abschnitt ändern diese Standardwerte.
Wählen Sie den Basis-Branch
Neue Worktrees verzweigen sich vom Standard-Branch des Repositories, sodass die meisten Sitzungen diese Einstellung nicht benötigen. Setzen Sieworktree.baseRef in Einstellungen, um stattdessen von Ihrer aktuellen Arbeit zu verzweigen. Die Einstellung akzeptiert zwei Werte:
"fresh"(Standard): Verzweigung vom Standard-Branch des Repositories auf dem Remote, normalerweisemain, sodass der Worktree von einem sauberen Tree startet, der dem Remote entspricht."head": Verzweigung von Ihrem aktuellen lokalenHEAD, sodass der Worktree Ihre nicht gepushten Commits und Feature-Branch-Status trägt. Verwenden Sie dies, wenn Sie Subagents isolieren, die an laufenden Arbeiten arbeiten müssen. Innerhalb eines Worktrees wird"head"zu diesem WorktreesHEADaufgelöst, nicht zumHEADdes Haupt-Checkouts.
worktree.baseRef nicht auf einen Branch-Namen setzen. Um einen Worktree von einem bestimmten vorhandenen Branch zu starten, erstellen Sie ihn direkt mit Git.
Für eine "fresh"-Basis hält Claude Code origin/HEAD aktuell: Wenn das Repository in den letzten 24 Stunden nicht abgerufen wurde, ruft es den Standard-Branch ab, begrenzt auf fünf Sekunden, und verwendet die lokal zwischengespeicherte Ref, wenn der Abruf fehlschlägt. Wenn kein Remote konfiguriert ist oder origin/HEAD nicht lokal zwischengespeichert ist und nicht abgerufen werden kann, fällt der Worktree auf Ihren aktuellen lokalen HEAD zurück. Vor v2.1.208 verwendete ein neuer Worktree, was immer origin/HEAD bereits lokal zwischengespeichert war.
Dieses Beispiel macht jeden neuen Worktree von Ihrer aktuellen Arbeit verzweigen:
Verzweigung von einem Pull Request
Um von einem bestimmten Pull Request oder Merge Request zu verzweigen, übergeben Sie--worktree die Nummer mit # vorangestellt, eine GitHub-Pull-Request-URL oder eine GitLab-Merge-Request-URL wie https://gitlab.com/group/repo/-/merge_requests/123. Claude Code ruft den Head-Commit dieser Änderung von origin ab und erstellt den Worktree unter .claude/worktrees/pr-<number>. Zitieren Sie das Argument, damit Ihre Shell # nicht als Anfang eines Kommentars behandelt:
origin-Remote ab und wählt den Abruf-Pfad nach dem Host von origin:
- github.com: ruft
pull/<number>/headab - gitlab.com: ruft
merge-requests/<number>/headab - GitHub Enterprise, selbstverwaltetes GitLab oder ein anderer Host: versucht zuerst
pull/<number>/head, dannmerge-requests/<number>/head
#<number> und GitHub-Style-Pull-Request-URLs für --worktree und rief immer pull/<number>/head ab.
Kopieren Sie gitignorierte Dateien in Worktrees
Ein Worktree ist ein frischer Checkout, sodass nicht verfolgte Dateien wie.env oder .env.local aus Ihrem Haupt-Repository nicht vorhanden sind. Um sie automatisch zu kopieren, wenn Claude einen Worktree erstellt, fügen Sie eine .worktreeinclude-Datei zu Ihrem Projekt-Root hinzu.
Die Datei verwendet .gitignore-Syntax. Nur Dateien, die einem Muster entsprechen und auch gitignoriert sind, werden kopiert, sodass verfolgte Dateien niemals dupliziert werden.
Wenn Sie ein Muster schreiben, das mit **/ beginnt, und die Dateien, die Sie möchten, befinden sich in einem Verzeichnis, das als Ganzes gitignoriert ist, kopiert Claude Code sie nur, wenn dieses Verzeichnis selbst dem Muster entspricht, oder wenn der erste Name nach **/ einer der Namen im Pfad des Verzeichnisses ist. Zum Beispiel, wenn Sie **/.claude/skills/*.md schreiben, ist dieser erste Name .claude, sodass Claude Code die übereinstimmenden Dateien aus einem ignorierten .claude/-Verzeichnis kopiert. Um Dateien aus einem ignorierten Verzeichnis zu kopieren, das ein **/-Muster nicht erreicht, benennen Sie das Verzeichnis im Muster: schreiben Sie vendor/**/config.json statt **/config.json. Vor v2.1.239 kopierte Claude Code Dateien aus einem vollständig ignorierten Verzeichnis für ein **/-Muster nur, wenn das Verzeichnis selbst dem Muster entsprach.
Diese .worktreeinclude kopiert zwei Env-Dateien und eine Secrets-Konfiguration in jeden neuen Worktree:
.worktreeinclude
--worktree-Worktrees, Subagent-Worktrees und parallele Sitzungen in der Desktop-App. Mit einem WorktreeCreate-Hook kopieren Sie die Dateien im Hook-Skript.
Verwenden Sie einen Worktree-Namen erneut
Das Übergeben von--worktree eines Namens, dessen Verzeichnis bereits existiert, öffnet diesen vorhandenen Worktree, anstatt einen neuen zu erstellen.
Mit der Standard-"fresh"-Basis wird ein erneut geöffneter Worktree auf den Standard-Branch des Repositories zurückgesetzt, anstatt bei seinem alten Tip fortzufahren, wenn alle folgenden Bedingungen erfüllt sind:
- Es hat keine nicht committeten Änderungen oder nicht verfolgten Dateien.
- Es befindet sich immer noch auf dem Branch, den Claude Code für ihn erstellt hat.
- Es hat keine Commits von sich selbst, oder sein Pull Request oder Merge Request wurde zusammengeführt und sein Remote-Branch gelöscht.
- Der Worktree erfüllt eine der Bedingungen nicht.
- Claude Code kann den Status des Worktrees nicht überprüfen.
worktree.baseRefist"head".- Der Name ist eine Pull-Request- oder Merge-Request-Referenz.
Ersetzen Sie die Worktree-Erstellung durch einen Hook
Konfigurieren Sie einenWorktreeCreate-Hook, um die Standard-git worktree-Logik vollständig zu ersetzen, einschließlich der Platzierung von Worktrees anderswo als .claude/worktrees/. Ein vollständiges Beispiel finden Sie unter Non-Git-Versionskontrolle.
Was Worktrees mit dem Haupt-Checkout teilen
Ein Worktree erhält seine eigenen Dateien und Branch, aber es teilt das Folgende mit dem Haupt-Checkout:-
Das
.git-Verzeichnis des Repositories: Git-Befehle in einem Worktree schreiben in das gemeinsame.git-Verzeichnis des Haupt-Repositories, und Sandboxing erlaubt diese Schreibvorgänge, sodass Befehle wiegit commitvon innen in einem Worktree mit aktivierter Sandbox funktionieren. - Plugins: Plugins, die im Projekt-Bereich aus dem Haupt-Checkout installiert sind, werden auch in Worktrees desselben Repositories geladen, sodass Sie sie nicht pro Worktree neu installieren müssen. Erfordert Claude Code v2.1.200 oder später.
-
Genehmigungen: Das Wählen von „Ja, und nicht mehr fragen” für einen Bash-Befehl in einer Worktree-Sitzung speichert die Regel in der
.claude/settings.local.jsondes Haupt-Checkouts, sodass sie im Haupt-Checkout und in jedem anderen Worktree des Repositories gilt und das Entfernen des Worktrees überlebt. Unter Windows und in den anderen Fällen, in denen Claude Code das Repository-Root nicht verwendet, bleibt die Regel bei diesem Worktree. Vor v2.1.211 wurde eine Genehmigung, die in einem Worktree gewährt wurde, in diesem Worktree gespeichert, galt nicht anderswo und ging verloren, wenn der Worktree entfernt wurde. Siehe wo Genehmigungen gespeichert werden. -
Nicht nachverfölgte Skills, Agents und Befehle: Wenn der Worktree-Checkout kein
.claude/skills-Verzeichnis in seinem Root hat, zum Beispiel weil Ihr.claude/skillsgitignoriert ist, lädt Claude Code die Projekt-Skills des Haupt-Checkouts in der Worktree-Sitzung. In einem Worktree mit seinem eigenen.claude/skills-Verzeichnis wird nur diese Kopie geladen. Dieselbe Durchlesung gilt für.claude/agentsund.claude/commands. Für Skills erfordert die Durchlesung Claude Code v2.1.277 oder später.
--worktree, mit git worktree add oder über die Desktop-App erstellen.
Verwalten Sie Worktrees manuell
Erstellen Sie Worktrees direkt mit Git, wenn Sie einen bestimmten vorhandenen Branch auschecken oder den Worktree außerhalb des Repositories platzieren müssen. Erstellen Sie einen Worktree auf einem neuen Branch:fix-issue-456 durch einen Branch, der bereits in Ihrem Repository existiert:
Non-Git-Versionskontrolle
Die Worktree-Isolation verwendet standardmäßig Git. Für SVN, Perforce, Mercurial oder andere Systeme konfigurieren SieWorktreeCreate- und WorktreeRemove-Hooks, um benutzerdefinierte Erstellungs- und Bereinigungslogik bereitzustellen. Da der Hook das Standard-Git-Verhalten ersetzt, wird .worktreeinclude nicht verarbeitet, wenn Sie --worktree verwenden. Kopieren Sie stattdessen alle lokalen Konfigurationsdateien in Ihr Hook-Skript.
Dieser WorktreeCreate-Hook liest den Worktree-Namen aus der JSON auf stdin mit jq, checkt eine frische SVN-Arbeitskopie aus und gibt den Verzeichnispfad aus, damit Claude Code ihn als Arbeitsverzeichnis der Sitzung verwenden kann. Fügen Sie die Konfiguration zu Ihrer settings.json hinzu:
WorktreeRemove-Hook, um die Bereinigung durchzuführen, wenn die Sitzung endet. Siehe die Hooks-Referenz für das Eingabeschema und ein Entfernungsbeispiel.
Ein WorktreeCreate-Hook ermöglicht es Ihnen auch, /batch außerhalb eines Git-Repositorys auszuführen. Jeder /batch-Subagent veröffentlicht dann seine Änderung mit den Versionskontrollbefehlen Ihres Projekts und meldet, was er veröffentlicht hat, wenn er keinen Pull Request öffnen kann. Das Ausführen von /batch außerhalb eines Git-Repositorys erfordert Claude Code v2.1.281 oder später.
Fehlerbehebung
Claude Code meldet die folgenden Fehler, wenn es einen Worktree erstellt, einen beim Start betritt oder eine fortgesetzte Sitzung zu einem zurückbringt.Claude Code kann den Worktree beim Start nicht betreten
Wenn Claude Code den Worktree-Verzeichnis beim Start nicht betreten kann, gibt es einen Fehler aus, der den Pfad benennt, und beendet sich mit Code 1. Dies kann passieren, wenn einWorktreeCreate-Hook etwas anderes als das erstellte Verzeichnis ausgibt, oder wenn das Verzeichnis nach der Einrichtung gelöscht wurde.
Die Worktree-Erstellung schlägt auf einem symlink-Pfad fehl
Claude Code weigert sich, einen Worktree zu erstellen, wenn.claude, .claude/worktrees oder das Worktree-Verzeichnis selbst ein Symlink ist, und der Fehler benennt den symlink-Pfad. Entfernen Sie den Symlink und versuchen Sie es erneut. Vor v2.1.212 folgte die Worktree-Erstellung einem Symlink, wenn das Repository bereits einen committeten Symlink an einem dieser Pfade enthielt, und konnte Dateien außerhalb des Repositories erstellen.
Git LFS-Dateien sind Zeiger-Dateien in einem Worktree, den Claude Code erstellt hat
Wenn Sie Git LFS mitgit lfs install --local einrichten, enthält ein Worktree, den Claude Code erstellt, LFS-Zeiger-Dateien statt der echten Dateien. Das --local-Flag schreibt den LFS-Filter in die .git/config des Repositories selbst, anstatt in Ihre globale Git-Konfiguration. Ein einfaches git lfs install schreibt in Ihre globale Konfiguration und ist nicht betroffen. Das gleiche gilt für jeden anderen Filter-Treiber, der in der .git/config des Repositories selbst definiert ist.
Claude Code überspringt die Filter-Treiber des Repositories selbst, wenn es einen Worktree erstellt, da ein Filter-Treiber ein Shell-Befehl ist, und alles, das in das Repository schreiben kann, einschließlich Claude, könnte einen dort eingefügt haben. Vor v2.1.247 führte Claude Code diese Treiber während der Worktree-Erstellung aus.
Um die echten Dateien zu erhalten, führen Sie git lfs pull im Worktree aus.
In vier seltenen Fällen erstellt Claude Code überhaupt keinen Worktree: Es kann nicht feststellen, welche Filter-Treiber die Repository-Konfiguration definiert, oder es findet dort eine Einstellung, die es nicht ausschalten kann. Ordnen Sie den Fehler seiner Behebung zu:
Could not read the repository git config to neutralize filter drivers: Claude Code konnte die.git/configdes Repositories nicht lesen, zum Beispiel wegen ihrer Berechtigungen. Beheben Sie das und versuchen Sie es erneut.The repository git config defines a filter driver whose name cannot be neutralized (contains "=" or a newline): Benennen Sie diesen Filter-Treiber in.git/configum oder entfernen Sie ihn und versuchen Sie es erneut.The repository git config has a conditional include (includeIf): Verschieben Sie die Einstellungen, dieincludeIfin.git/configabruft, direkt in diese Datei, entfernen SieincludeIfund versuchen Sie es erneut. EinincludeIfin Ihrer globalen Git-Konfiguration löst dies nicht aus.Git was not run: the repository's own git config sets <key>: Die Meldung benennt einen Schlüssel, der Git LFS auf ein auszuführendes Programm verweist, wielfs.customtransfer.<name>.pathoderlfs.standalonetransferagent. Wenn diese Einstellung Ihnen gehört, verschieben Sie sie in Ihre globale Git-Konfiguration. Wenn Sie sie nicht erkennen, entfernen Sie sie aus der Repository-Konfiguration, da ein Tool oder Checkout, dem Sie nicht vertrauen, sie möglicherweise geschrieben hat. Versuchen Sie es erneut, sobald der Schlüssel aus der Repository-Konfiguration weg ist.
Claude Code weigert sich, einen Worktree zu verwenden
Ein Fehler, der mitRefusing to use <path> as an isolation worktree beginnt, bedeutet, dass Claude Code die Git-Identität des Verzeichnisses überprüft hat, bevor es es als isolierten Checkout einer Sitzung oder eines Subagents angenommen hat, und es abgelehnt hat. Die Prüfung läuft, ob Claude Code den Worktree erstellt, einen vorhandenen betritt oder einen aus einem früheren Lauf wiederverwenden.
In den meisten Fällen sagt der Rest der Meldung, dass die Git-Metadaten des Verzeichnisses in den Haupt-Checkout aufgelöst werden: Zum Beispiel zeigt seine .git-Datei auf das .git-Verzeichnis des Haupt-Repositories selbst, oder Git löst sein Arbeitsverzeichnis durch eine core.worktree-Umleitung zum Haupt-Checkout auf. Von einem solchen Verzeichnis würde ein gewöhnlicher Git-Befehl wie git reset --hard auf den Haupt-Checkout statt auf den Worktree wirken. Claude Code lehnt auch ab, wenn das Verzeichnis einen .git-Eintrag hat, den es nicht lesen kann, anstatt anzunehmen, dass der Worktree sicher ist.
Ein Verzeichnis ohne Git-Metadaten überhaupt, wie eines, das Ihr WorktreeCreate-Hook erstellt, besteht die Prüfung nur, wenn kein Git-Repository es enthält. Wenn der Hook das Verzeichnis in einem Repository erstellt, löst Git es zu dem Checkout dieses Repositories auf und Claude Code lehnt es mit der Meldung git resolves its working tree to ab, daher sollte der Hook seine Verzeichnisse außerhalb eines Repositories erstellen.
Claude Code hinterlässt das abgelehnte Verzeichnis an Ort und Stelle, da es Arbeit enthalten kann. Ordnen Sie die Meldung ihrer Wiederherstellung zu, ob sie Refusing to use <path> folgt oder in einer Fortsetzungsmeldung angezeigt wird; einige Enden treten nur in Fortsetzungsmeldungen auf:
- Sagt
launch from the parent checkoutoderRun the resume from the project checkout: Sie haben Claude Code von innen im Worktree gestartet. Starten Sie stattdessen vom Haupt-Checkout; der Worktree benötigt keine Neuerstellung. - Sagt
it cannot be resumed or re-entered: Nichts in dieser Sitzung garantiert den Worktree von dort, wo Sie gestartet haben. Erstellen Sie ihn neu; das Verzeichnis und seine Arbeit bleiben auf der Festplatte zur manuellen Wiederherstellung, und wenn der Worktree einen Haupt-Checkout hat, funktioniert auch das Fortsetzen von dort. - Sagt
it contains the protected checkout: Das abgelehnte Verzeichnis ist ein übergeordnetes Element Ihres Haupt-Checkouts, wie Ihr Home-Verzeichnis. Löschen Sie es nicht. Ändern Sie den Worktree-Pfad, wie den Pfad, den IhrWorktreeCreate-Hook zurückgibt, oder dasEnterWorktree-Ziel, sodass der Worktree den Checkout nicht enthält. - Sagt
the protected checkout <path> has a .git entry that could not be examinedoderhas git metadata that could not be resolved: Das Problem ist die Git-Metadaten des Haupt-Checkouts, nicht die des Worktrees. Löschen Sie den Worktree nicht und ignorieren Sie den nachfolgenden Rat der Meldung, ihn neu zu erstellen, was auf diese beiden Enden nicht zutrifft. Reparieren Sie den Haupt-Checkout, zum Beispiel ein Berechtigungsproblem oder eine Git-dubious ownership-Ablehnung auf seinem.git, und versuchen Sie es erneut. - Sagt
its recorded path has a network spelling: Claude Code setzt niemals in einen Worktree auf einem Netzwerkpfad fort. Erstellen Sie den Worktree auf einem lokalen Pfad neu. - Jedes andere Ende: Die Meldung benennt das Problem und seine Behebung, wie das Entfernen einer
core.worktree-Umleitung oder die Neuerstellung des Worktrees; folgen Sie ihr. Bevor Sie ein Verzeichnis löschen, dessen Meldung sagt, dass seine Git-Identität nicht überprüft werden konnte, beheben Sie zunächst die benannte Ursache, zum Beispiel einen Symlink im Pfad des Worktrees oder Git selbst, das nicht ausgeführt wird, da das Verzeichnis gesund sein kann. Wenn Sie neu erstellen, retten Sie zunächst alle Änderungen, die Sie aus dem alten Verzeichnis benötigen; es bleibt auf der Festplatte.
Die Sitzung wird außerhalb ihres Worktrees fortgesetzt
Wenn Sie eine Sitzung interaktiv fortsetzen und Claude Code sie nicht zu ihrem Worktree zurückbringen kann, teilt Claude Code dies mit einer der folgenden Meldungen mit. Wenn Claude Code die Worktree-Bindung löscht, zeichnet es das Löschen im Sitzungstranskript auf. Wenn Sie Transkriptschreibvorgänge unterdrücken, sagt die Meldung stattdessen, dass die Bindung nicht gelöscht werden konnte und dass Claude Code den Worktree bei einer späteren Fortsetzung erneut überprüft.
Im nicht-interaktiven Modus mit
-p und bei Fortsetzungen, die das Agent SDK ausführt, stoppt Claude Code die Fortsetzung mit einem stderr-Fehler für jede Ablehnung außer einem gegangenen Worktree, anstatt ohne Isolation fortzufahren.
Mit --output-format stream-json kommt die Ablehnung auch auf stdout als eine result-Meldung mit Subtyp error_during_execution an, deren errors-Array denselben Text trägt, sodass eine Agent SDK-Anwendung den Grund erhält, anstatt nur einen Nicht-Null-Exit. Vor v2.1.260 erzeugte eine Worktree-Fortsetzungsablehnung keine result-Meldung.
Die Meldungen haben andere Formen als die interaktiven Meldungen in der Tabelle:
-
Error: cannot resume into worktree <path>: ...This session was not started.für eine Ablehnung, die die Tabelle alsDid not re-enterzeigt. Claude Code löscht die Worktree-Bindung vor dem Beenden, und der Fehler sagt dies; das nächste Mal, wenn Sie die Unterhaltung fortsetzen, wird die Sitzung im aktuellen Verzeichnis ohne Worktree-Isolation fortgesetzt. Vor v2.1.260 schrieb Claude Code das gelöschte Binding nicht, daher schlug jeder Wiederholungsversuch derselben Fortsetzung mit demselben Fehler fehl. Wenn Sie Transkriptschreibvorgänge unterdrücken, kann das Löschen nicht gespeichert werden. Der Fehler sagt dann, dass derselbe Befehl erneut abgelehnt wird, und benennt--fork-sessionund das Starten einer neuen Unterhaltung als Wege, um ohne den Worktree fortzufahren. -
Error: could not verify worktree <path> for this resume, so the resume was aborted...fürCould not verify -
Error: ...The worktree binding is kept.fürCould not re-enter -
Notice: the worktree <path> for this session no longer exists...für einen gegangenen Worktree; Claude Code gibt ihn aus und setzt die Sitzung fort, wie eine interaktive Fortsetzung
startup_failure_reason worktree_unverified für den Fehler could not verify worktree und worktree_resume_refused für die Fehler cannot resume into worktree und The worktree binding is kept. Eine Anwendung kann stattdessen darauf verzweigen, anstatt den Fehlertext abzugleichen. Vor v2.1.274 trug das Ergebnis kein startup_failure_reason-Feld.
Siehe auch
Worktrees handhaben die Datei-Isolation. Die verwandten Seiten unten behandeln die Delegierung von Arbeit in diese isolierten Checkouts, das Weitergeben von Erkenntnissen zwischen ihnen und das Wechseln zwischen den Sitzungen, die Sie erstellen:- Subagents: Delegieren Sie Arbeit an isolierte Agenten innerhalb einer Sitzung
- Sitzungsübergreifendes Messaging: Lassen Sie die Sitzungen in Ihren Worktrees Erkenntnisse aneinander weitergeben
- Agent-Teams: Koordinieren Sie mehrere Claude-Sitzungen automatisch
- Sitzungen verwalten: Benennen, fortsetzen und wechseln Sie zwischen Gesprächen
- Desktop-Parallelsitzungen: Worktree-gestützte Sitzungen in der Desktop-App