Claude Code Worktrees erklärt
Git unterstützt Worktrees schon seit Jahren: git worktree add checkt einen Branch in ein zweites Verzeichnis aus, das auf denselben .git-Daten basiert. Darauf baut Claude Code auf. Mit --worktree (oder -w) legt es den Worktree für dich an, startet die Session darin, blockiert Änderungen, die in deinem Haupt-Checkout landen würden, und bietet beim Beenden an aufzuräumen.
Worktrees isolieren Dateien, sonst nichts. Um eine Aufgabe innerhalb einer Unterhaltung auf mehrere Worker zu verteilen, nutze Subagents; einen Vergleich der Optionen findest du unter mehrere Claude-Code-Agenten.
- Standard-Speicherort:
.claude/worktrees/<name>/im Root des Repositorys. - Standard-Branchname:
worktree-<name>. Lässt du den Namen weg, wählt Claude Code einen, etwabright-running-fox. - Geteilt mit deinem Checkout: das
.git-Verzeichnis (Commits und Branches sind also überall sichtbar), Plugins mit Projekt-Scope und "Nicht mehr fragen"-Freigaben für Berechtigungen. - Nicht geteilt: alles, was in der .gitignore steht, etwa
.env,node_modulesund Build-Ausgaben. Ein Worktree ist ein frischer Checkout.
Der Worktree-Workflow Schritt für Schritt
Ignoriere den Worktree-Ordner
Füge
.claude/worktrees/zur.gitignorehinzu, damit Worktree-Dateien in deinem Haupt-Checkout nicht als untracked auftauchen. Wenn du Claude in diesem Repository noch nie gestartet hast, führe zuerst einmalclaudeaus und bestätige die Vertrauensabfrage für den Workspace; vorher beenden sich interaktive--worktree-Starts sofort.Starte eine Session pro Aufgabe
Führe
claude --worktree <name>für jede Aufgabe in einem eigenen Terminal aus. Mit einem bereits vorhandenen Namen öffnet der Befehl diesen Worktree erneut, statt einen neuen anzulegen. Du kannst Claude auch mitten in der Session bitten, "in einem Worktree zu arbeiten", dann wechselt es mit dem ToolEnterWorktreeselbst in einen.# Zwei isolierte Sessions, jede in ihrem eigenen Terminal claude --worktree feature-auth claude --worktree fix-flaky-test # Einen Worktree aus Pull Request 1234 abzweigen (das # in Anführungszeichen setzen) claude --worktree "#1234" # Worktrees aus git status heraushalten echo ".claude/worktrees/" >> .gitignoreNimm die untracked Dateien mit
Liste ignorierte Dateien, die das Projekt braucht, etwa
.envund.env.local, in einer.worktreeinclude-Datei im Root des Repositorys auf, in.gitignore-Syntax. Claude Code kopiert passende Dateien in jeden Worktree, den es anlegt, auch in die von Subagents und der Desktop-App. Installiere danach die Abhängigkeiten im Worktree oder richte ihn über die Einstellungen ein: Dieses Beispiel zweigt von deinem aktuellen Stand ab, nutzt ein einzigesnode_modulesund checkt nur das Web-Package aus.{ "worktree": { "baseRef": "head", "symlinkDirectories": ["node_modules"], "sparsePaths": [".claude", "packages/web"] } }Lass die Sessions arbeiten
Solange eine Session isoliert ist, verweigert Claude Code Dateiänderungen, die auf den Haupt-Checkout zielen, Befehle, deren Arbeitsverzeichnis der Haupt-Checkout ist, und Git-Befehle, die dorthin umgeleitet werden (
git -C,--git-dir,GIT_DIR). Was ein einfacher Shell-Befehl wiecpschreibt, verfolgt es nicht; Berechtigungen und Sandboxing bleiben also wichtig.Reviewe und merge wie jeden anderen Branch
Jeder Worktree ist ein ganz normaler Branch. Committe und pushe von dort aus, öffne einen Pull Request und reviewe ihn wie den eines Teamkollegen. Da alle Worktrees
.gitteilen, ist der Branch sofort auch in deinem Haupt-Checkout sichtbar.Beenden und aufräumen
Beim Beenden prüft Claude Code den Worktree. Ein sauberer Worktree aus einer unbenannten Session wird samt Branch automatisch entfernt; bei einer benannten Session fragt es vorher. Gibt es Änderungen, untracked Dateien oder neue Commits, fragt es, ob der Worktree bleiben oder weg soll, und gibt einen Befehl
claude --worktree <name> --resumeaus, mit dem du später zurückkommst.
Quelle: Claude-Code-Dokumentation, Run parallel sessions with worktrees
Worktree-Einstellungen in Claude Code
Alle gehören unter worktree in eine Einstellungsdatei (~/.claude/settings.json, .claude/settings.json oder .claude/settings.local.json).
| Einstellung | Was sie bewirkt | Standard |
|---|---|---|
worktree.baseRef | "fresh" zweigt vom Standard-Branch des Remotes ab (origin/main); "head" zweigt von deinem lokalen HEAD ab, ungepushte Commits eingeschlossen | "fresh" |
worktree.symlinkDirectories | Verlinkt Verzeichnisse wie node_modules per Symlink aus dem Haupt-Checkout, statt sie zu duplizieren | Keine |
worktree.sparsePaths | Checkt per Sparse-Checkout nur die aufgeführten Verzeichnisse (plus Dateien im Root) aus; nimm .claude mit auf | Ganzer Baum |
worktree.bgIsolation | "worktree" lässt Hintergrund-Sessions nur innerhalb eines Worktrees ändern; "none" erlaubt Änderungen an der Arbeitskopie | "worktree" |
| Worktree-Speicherort (Desktop-App) | Settings > Code legt einen eigenen Ordner für lokale Sessions fest; SSH-Verbindungen haben einen eigenen | .claude/worktrees/ |
.worktreeinclude (Datei, keine Einstellung) | Kopiert passende ignorierte Dateien in jeden neuen Worktree | Keine |
Claude Code Worktree vs. Branch vs. git worktree
| Branch wechseln | `git worktree add` + `claude` | `claude --worktree` | |
|---|---|---|---|
| Getrennte Dateien auf der Platte | Nein: ein Verzeichnis, jeweils ein Branch | Ja | Ja |
| Mehrere Sessions gleichzeitig | Nein: sie überschreiben sich gegenseitig | Ja | Ja |
| Speicherort | Dein Checkout | Wo immer du willst | .claude/worktrees/<name>/ oder der Pfad eines Hooks |
| Startet von | Dem Branch, zu dem du wechselst | Jedem bestehenden oder neuen Branch | origin/<default>, deinem HEAD oder einem PR |
Kopiert .env | Nicht nötig | Nein | Ja, mit .worktreeinclude |
| Änderungen außerhalb blockiert | Nein | Nein | Ja |
| Aufräumen | Entfällt | git worktree remove | Wird beim Beenden angeboten |
Von Hand mit git worktree
Nimm reines Git, wenn du einen bestimmten bestehenden Branch oder einen Ordner außerhalb des Repositorys willst; worktree.baseRef kann keinen Branch benennen. Plugins und Berechtigungsfreigaben teilt Claude Code auch mit diesen Worktrees.
Worktree anlegen, Claude starten, danach entfernen
Ersetze
feature-adurch einen neuen Branchnamen oder lass-bweg, um einen bereits vorhandenen Branch auszuchecken.git worktree add ../app-feature-a -b feature-a cd ../app-feature-a && claude git worktree list git worktree remove ../app-feature-a
Subagents und Hintergrund-Sessions in Worktrees
- Bitte Claude, "für deine Agenten Worktrees zu verwenden", oder ergänze
isolation: worktreeim Frontmatter eines eigenen Subagents in.claude/agents/; dann arbeitet jeder Subagent in seinem eigenen temporären Worktree. - Der Worktree eines Subagents ohne Änderungen wird entfernt, sobald der Subagent fertig ist. Einer mit Änderungen bleibt, bis ein regelmäßiger Aufräumlauf ihn nach
cleanupPeriodDaysentfernen kann, ohne dass Arbeit verloren geht. - Hintergrund-Sessions (
claude --bg) ändern standardmäßig nur innerhalb eines Worktrees; starte eine mitclaude --bg --worktreeoder setzeworktree.bgIsolationauf"none". - Schalte in der Desktop-App unter dem Eingabefeld Worktree ein, bevor du eine Session startest.
Worktrees aufräumen und typische Probleme
- Starts mit
claude -p --worktreehaben keine Abfrage beim Beenden und lassen ihre Worktrees deshalb liegen. Entferne sie mitgit worktree remove, vorher mitgit worktree unlock, falls Git sie als gesperrt meldet. Can only use --worktree in a git repository: Führegit initaus und lege einen ersten Commit an, oder richte einenWorktreeCreate-Hook für SVN, Perforce oder Mercurial ein.- Git-LFS-Dateien erscheinen als Pointer-Dateien, wenn LFS mit
--localinstalliert wurde: Führegit lfs pullim Worktree aus. - Claude Code legt keinen Worktree an, wenn
.claudeoder.claude/worktreesein Symlink ist. - In Hooks zeigt
${CLAUDE_PROJECT_DIR}weiter auf den Haupt-Checkout; den Worktree-Pfad liefert das Feldcwdder Hook-Eingabe. - Ein Worktree mit Basis
"fresh"ohne eigene Commits oder mit bereits gemergtem PR wird auf den Standard-Branch zurückgesetzt, wenn du ihn über seinen Namen erneut öffnest.
Worktrees halten Sessions auseinander. Crewmark hält sie beschäftigt.
Worktrees lösen das Kollisionsproblem, aber jede Session bleibt untätig, bis du etwas tippst. Crewmark macht aus einer Session von Claude Code, Codex, DeepSeek Harness oder OpenCode einen KI-Mitarbeiter mit Rolle, Ziel und Arbeitszeiten und weckt ihn per Heartbeat, damit er das nächste Issue von einem Board übernimmt.
Ein Mitarbeiter pro Worktree
Gib jedem Mitarbeiter einen eigenen Worktree und eine eigene Rolle, etwa einem Programmierer und einem Reviewer im selben Repository, wie bei mehreren Claude-Code-Agenten.
Lass den Heartbeat die Arbeit starten
Während seiner Arbeitszeiten wacht jeder Mitarbeiter alle 15, 30 oder 60 Minuten in derselben Unterhaltung auf; siehe wie du Claude Code proaktiv machst.
Weise Issues zu und reviewe Branches
Lege Arbeit auf das Board; jeder Mitarbeiter übernimmt ein Issue, committet auf seinem eigenen Branch und schreibt dir, wenn er eine Entscheidung braucht. Lies, was ein KI-Mitarbeiter ist.
FAQ zu Claude Code Worktrees
Was ist ein Worktree in Claude Code?
Ein separates Git-Arbeitsverzeichnis mit eigenen Dateien und eigenem Branch, das sich die History deines Repositorys teilt. claude --worktree <name> legt einen an und startet die Session darin, sodass parallele Sessions nicht dieselben Dateien bearbeiten.
Wo legt Claude Code Worktrees ab?
In .claude/worktrees/<name>/ im Root des Repositorys, auf einem Branch namens worktree-<name>. In der Desktop-App kannst du unter Settings einen anderen Ordner wählen, und ein WorktreeCreate-Hook kann sie überall ablegen.
Von welchem Branch startet ein Claude Code Worktree?
Standardmäßig vom Standard-Branch des Remotes, meist origin/main. Setze worktree.baseRef auf "head", um von deinem lokalen HEAD abzuzweigen, übergib "#1234", um von einem Pull Request zu starten, oder lege den Worktree für jeden anderen Branch mit git worktree add an.
Warum fehlt meine .env-Datei im Worktree?
Ein Worktree ist ein frischer Checkout, deshalb fehlen von Git ignorierte Dateien. Liste sie in einer .worktreeinclude-Datei im Root des Repositorys auf, dann kopiert Claude Code sie in jeden neuen Worktree.
Wie räume ich Claude Code Worktrees auf?
Beim Beenden einer Session bietet Claude Code an, ihren Worktree zu entfernen, und entfernt saubere, unbenannte automatisch. Worktrees aus -p-Starts bleiben liegen: Liste sie mit git worktree list auf und entferne sie mit git worktree remove.
Worktree oder Branch: Was ist der Unterschied?
Ein Branch ist eine Folge von Commits; ein Worktree ist ein Verzeichnis, in dem ein Branch ausgecheckt ist. Ein Branch-Wechsel ändert die Dateien in deinem einen Verzeichnis, Worktrees geben dagegen jedem Branch ein eigenes Verzeichnis, sodass mehrere Sessions gleichzeitig laufen können.
Können Subagents Worktrees nutzen?
Ja. Bitte Claude, für seine Agenten Worktrees zu verwenden, oder ergänze isolation: worktree im Frontmatter eines eigenen Subagents. Jeder bekommt einen temporären Worktree, der entfernt wird, wenn er nichts ändert.
Am 6. November 2026 mit der Claude-Code-Dokumentation (Worktrees, Einstellungen, CLI-Referenz und Desktop-App) abgeglichen.