Blog

Git worktree i Claude Code: parallelle sessioner

Markdown

Sådan bruger du --worktree, .worktreeinclude, worktree.baseRef og isolering af subagenter. Forskelle fra grene, oprydning af worktrees og almindelige fejl.

Læs hele artiklen

Praktiske oplysninger om at arbejde med Ailoot findes i dokumentationen.

Hvad er en git worktree i Claude Code

Det vigtigste

En Git-worktree er en separat arbejdsmappe til en anden gren i det samme repository. Kommandoen claude --worktree <name> opretter automatisk en worktree i .claude/worktrees/<name>/ og starter Claude Code i den. To terminaler → to sessioner → forskellige filer på disken, uden forstyrrelser. Funktionen findes som standard i Claude Code v2.0+ og kan konfigureres med .worktreeinclude til hemmeligheder og worktree.baseRef til valg af basisgren.

At starte flere agenter parallelt i samme mappe er den grundlæggende udfordring ved vibe-kodning i 2026-tempo. AI-agenter skriver kode hurtigere, end en person kan holde styr på, hvem der arbejder med hvad. Uden filisolering ender to parallelle Claude Code-sessioner i samme mappe med, at den ene session overskriver den andens arbejde.

Git worktree løser dette på filsystemniveau. Du har én hovedmappe, hvor du arbejder. Kommandoen claude --worktree feature-auth opretter mappen .claude/worktrees/feature-auth/ på en separat gren og starter Claude Code der. Filerne er isolerede. Ændringer i den ene session er ikke synlige for den anden, før du udtrykkeligt fletter dem sammen.

Anthropics officielle dokumentation beskriver det sådan:

Når hver Claude Code-session kører i sin egen worktree, påvirker redigeringer i én session aldrig filer i en anden. Du kan bygge en funktion i den ene terminal og rette en fejl i den anden.

— Anthropic Docs, https://code.claude.com/docs/en/worktrees

Et tip til selvkontrol: Hvis du nogensinde har fået et commit, hvor halvdelen af filerne var en andens arbejde, har du brug for en worktree.

Hvordan git worktree adskiller sig fra en almindelig gren

Det vigtigste

En almindelig git checkout skifter arbejdskopien i den samme mappe—de gamle filer forsvinder fra disken, indtil du vender tilbage til grenen. git worktree add opretter en anden mappe til en anden gren ved siden af den første. Begge grene ligger på disken samtidig; du skifter mellem dem med et enkelt cd. Under motorhjelmen er der ét .git-repository med delt historik og en delt fjernserver. Bare flere arbejdskopier.

Det almindelige Git-flow: Du står på grenen main og kører git checkout feature-x—Git overskriver arbejdskopiens filer. En kørende npm run dev går i stykker, fordi package.json blev ændret under den. Du gemmer dine ucommittede ændringer med stash og venter på, at IDE'en genindekserer. Du skifter tilbage, og det hele bliver overskrevet igen, så du må stash og pop igen.

Git worktree giver dig en anden mulighed: I stedet for at skifte én mappe mellem grene opretter du en anden mappe til en anden gren. Kommandoen git worktree add ../project-feature-x feature-x opretter mappen ../project-feature-x/ med filerne fra grenen feature-x. Din main bliver i den oprindelige mappe, og udviklingsserveren fortsætter med at køre.

Parametergit checkout-grengit worktree add
Arbejdskopiens filerOverskrivesVises i en ny mappe
Parallelt arbejde på to greneNejJa
Ucommittede ændringerKræver git stashIntet at gøre
SkiftehastighedAfhænger af forskellens størrelseBare cd
Diskplads1×N× (én kopi af filerne pr. gren)

Tidligere skulle worktree-tilstand i Claude Code konfigureres manuelt: git worktree add, derefter cd, derefter claude—og det skulle gentages i hver terminal. Flaget --worktree (også -w) klarer alle tre ting med én kommando.

Start den første parallelle session: flaget --worktree

Det vigtigste

Kommandoen claude --worktree feature-auth opretter en worktree i .claude/worktrees/feature-auth/, opretter grenen worktree-feature-auth fra origin/HEAD og starter Claude Code dér. Ingen manuel git worktree add eller cd. Gentag kommandoen i den tilstødende terminal med et andet navn for at få to uafhængige sessioner. Hvis du udelader navnet (claude --worktree), genererer Claude et tilfældigt navn som bright-running-fox.

Minimalt eksempel. Åbn den første terminal i projektets rodmappe:

claude --worktree feature-auth

Claude Code gør tre ting:

  1. Opretter .claude/worktrees/feature-auth/ med et øjebliksbillede af origin/HEAD (som regel din standardgren).
  2. Opretter en ny gren worktree-feature-auth.
  3. Starter sessionen i denne mappe.

Åbn en anden terminal i den samme rodmappe for repositoryt:

claude --worktree bugfix-123

Færdig. To Claude Code-sessioner, forskellige filer på disken, forskellige Git-grene. Hvis du skriver autentificering i den første og retter en fejlet test i den anden, kan de fysisk ikke komme i vejen for hinanden.

Hvis du ikke vil skrive et navn, finder Claude på et:

claude --worktree
# → opretter noget i stil med .claude/worktrees/bright-running-fox/

Et tip til Git-begyndere: Føj .claude/worktrees/ til .gitignore. Ellers ser du indholdet af alle worktrees som ikke-sporede filer, når du kører git status i hovedmappen:

# .gitignore
.claude/worktrees/

En faldgrube, du bør undgå: Før den første --worktree-start i en ny mappe skal du åbne den med en almindelig claude (uden flaget) og acceptere dialogen om tillid til arbejdsområdet. Hvis du ikke gør det, fejler flaget med fejlen “trust not accepted”—også hvis du kombinerer det med -p til headless-tilstand.

Hvor worktrees ligger, og hvordan du finder dem

Det vigtigste

Som standard ligger alle worktrees i .claude/worktrees/<name>/ ved siden af repositoryts rodmappe. Kør git worktree list for at se listen. Brug cd .claude/worktrees/feature-auth for at gå ind i en worktree manuelt. Hvis du vil skifte inde i en Claude-session, beder du den om at “skifte til en anden worktree”; den bruger det indbyggede EnterWorktree-værktøj. Den gamle worktree forbliver urørt på disken.

Standardplaceringen er fast: .claude/worktrees/<value>/ i repositoryts rodmappe. Hvis dit projekt ligger i ~/dev/my-app/, ligger feature-auth-worktreen i ~/dev/my-app/.claude/worktrees/feature-auth/.

Til ikke-standardiserede mappestrukturer (for eksempel hvis du vil have worktreen uden for repositoryt) findes hooken WorktreeCreate—mere om den nedenfor i afsnittet om SVN og Mercurial.

I én Claude-session kan du skifte til en anden eksisterende worktree. Skriv blot i chatten: “skift til .claude/worktrees/bugfix-123,” så kalder Claude værktøjet EnterWorktree. Den aktuelle mappe forbliver urørt—du kan vende tilbage på samme måde.

Standardkommandoen i Git viser en liste over alle worktrees, inklusive hovedarbejdskopien og dem, der er oprettet manuelt:

git worktree list

Outputtet ser sådan ud:

/home/user/dev/my-app                  abc1234 [main]
/home/user/dev/my-app/.claude/worktrees/feature-auth  def5678 [worktree-feature-auth]
/home/user/dev/my-app/.claude/worktrees/bugfix-123    9876fed [worktree-bugfix-123]

Kopiér .env og hemmeligheder: filen .worktreeinclude

Det vigtigste

En worktree er en frisk checkout. Filer fra .gitignore (.env, .env.local, lokale konfigurationer) mangler i den nye mappe. Uden dem kan npm run dev eller prisma db push ikke køre. Filen .worktreeinclude i projektets rodmappe bruger .gitignore-syntaks og fortæller Claude Code, hvilke filer der automatisk skal kopieres til hver ny worktree. Den bruges til --worktree, subagent-worktrees og sessioner i desktopappen.

Når --worktree opretter en ny mappe, får den kun det, der er committet til Git. .env med API-nøgler og .env.local med lokal konfiguration står i .gitignore, så de findes ikke i worktreen. Og den allerførste npm run dev fejler med “MISSING DATABASE_URL”.

Hjemmeløsningen er at kopiere .env manuelt efter hver --worktree. Det virker én gang og bliver derefter glemt. Anthropics løsning er en fil med navnet .worktreeinclude i projektets rodmappe, som opremser de Git-ignorerede filer, der automatisk skal kopieres til hver ny worktree.

Opret filen .worktreeinclude i repositoryts rodmappe:

.env
.env.local
config/secrets.json

Syntaksen er den samme som i .gitignore. Du kan bruge glob-mønstre:

.env*
*.local
config/*.json
.vscode/settings.json

Anthropic giver en tydelig regel for at forhindre uheld:

Filen bruger gitignore-syntaks. Kun filer, der matcher mønsteret og samtidig er ignoreret af Git, kopieres. Git-sporede filer duplikeres aldrig.

— Anthropic Docs, https://code.claude.com/docs/en/worktrees

Med andre ord kan du ikke komme til at kopiere package.json via .worktreeinclude—den findes ikke i .gitignore. Det er sikkert at indsætte vilkårlige mønstre dér.

Den samme .worktreeinclude fungerer i tre tilstande: manuel --worktree, automatiske worktrees til subagenter (se nedenfor) og sessioner fra Claude-desktopappen.

Worktree fra en pull request til kodegennemgang

Det vigtigste

Kommandoen claude --worktree "#1234" henter pull request #1234 fra origin og opretter en worktree i .claude/worktrees/pr-1234/ med PR-grenen. Du kan angive den fulde URL—claude --worktree https://github.com/OWNER/REPO/pull/1234. Nyttigt til kodegennemgang: Åbn PR'en i sin egen mappe, så Claude kan køre tests, læse logs og skrive en kommentar, mens hovedrepositoryt forbliver urørt.

Et typisk scenarie for kodegennemgang: En kollega har sendt en PR; du skal undersøge koden, køre tests og skrive en kommentar. Med en almindelig git checkout pull/1234/head skifter du arbejdskopien igen og afbryder din aktive session.

Med flaget --worktree klares det med én kommando:

claude --worktree "#1234"

Det sker der: Claude Code kører git fetch origin pull/1234/head, opretter en worktree i .claude/worktrees/pr-1234/ og checker PR-grenen ud. Sessionen starter. Du kan straks bede den om at “læse diffen, køre testene og finde logiske fejl”—mens Claude arbejder, fortsætter din hovedsession på main.

Alternativ syntaks er den fulde pull request-URL:

claude --worktree https://github.com/OWNER/REPO/pull/1234

I et rigtigt projekt kan du kombinere claude --worktree "#N" med din egen kodegennemgangssubagent for at få en automatisk gennemgang på et minut eller to. Start den i baggrunden, fortsæt arbejdet i hovedvinduet, og vend tilbage til resultatet via claude agents.

Basisgren: worktree.baseRef for fresh eller head

Det vigtigste

Som standard oprettes en worktree-gren fra origin/HEAD—den senest synkroniserede commit fra fjernserveren. Det giver en sikker, “ren” start. Hvis worktreen skal indeholde lokale commits, der ikke er pushed, skal du sætte worktree.baseRef: "head" i indstillingerne. HEAD identificerer et commit; sporede ændringer uden commit bliver i den oprindelige arbejdskopi og kræver separat, udtrykkelig overførsel. Nyttigt, når en subagent skal arbejde oven på din aktuelle funktion uden at skifte til main. Kun fresh eller head accepteres; vilkårlige refs understøttes ikke.

Standardindstillingen betyder, at hver ny worktree starter fra origin/HEAD. Fordelen er en ren start, som med sikkerhed svarer til det, CI vil se. Ulempen er, at ucommittede ændringer eller flere lokale commits ud over fjernserverens version af din aktuelle gren ikke kommer med i den nye worktree.

Føj dette til .claude/settings.json eller globale indstillinger for at starte et worktree fra dit aktuelle lokale HEAD-commit:

{
  "worktree": {
    "baseRef": "head"
  }
}

Nu starter claude --worktree experimental-feature fra den aktuelle lokale HEAD. Det er nyttigt, når funktionen allerede har lokale commits, som ikke er pushed. Det medtager ikke sporede ændringer, der stadig mangler commit. Bevar og overfør de nødvendige ændringer udtrykkeligt, hvis subagenten skal bruge dem, og undersøg derefter destinationens diff. Forveksl ikke overførslen med .worktreeinclude, som håndterer ignorerede lokale filer.

Indstillingen accepterer præcis to værdier: "fresh" (= origin/HEAD) og "head" (= lokal HEAD). Ingen vilkårlige refs som "feature-branch" eller en commit-hash—det er en bevidst begrænsning, der skal forhindre en kombinatorisk eksplosion af muligheder.

Isolér subagenter automatisk: isolation: worktree

Det vigtigste

En subagent i Claude Code er en specialiseret agent, der udfører én opgave (kodegennemgang, refaktorering, research). Hvis du starter flere subagenter parallelt fra én session, arbejder de som standard i samme mappe og kan overskrive hinandens filer. Føj isolation: worktree til subagentens frontmatter for at give hver enkelt en midlertidig worktree, som fjernes uden problemer ved afslutningen, hvis den ikke har committet noget.

Når du beder Claude om at “starte tre subagenter: én læser databasen, den anden undersøger API'et, og den tredje kontrollerer testene”, arbejder alle tre som standard i din arbejdskopi. Hvis bare to af dem skriver i den samme fil på samme tid, opstår der en konflikt. Løsningen er automatisk at give hver enkelt sin egen worktree.

Metode 1: Bed om det med ord. Skriv til Claude i samtalen:

Brug worktrees til dine agenter.

Claude anvender isolering på alle efterfølgende subagenter i denne session.

Metode 2: Angiv det eksplicit i selve subagenten. Føj et felt til frontmatter i subagentens fil (for eksempel .claude/agents/code-reviewer.md):

---
name: code-reviewer
description: Reads the diff and writes code review comments
isolation: worktree
---

Du er en omhyggelig reviewer. Læs diffen, og se efter logiske fejl...

Nu får hver start af denne subagent en midlertidig worktree i .claude/worktrees/. Hvis subagenten ikke skrev noget, slettes mappen automatisk, når den er færdig. Hvis der er ucommittede ændringer, spørger Claude, om de skal beholdes eller fjernes.

Basisgrenen for subagent-worktrees er den samme som for --worktree: som standard origin/HEAD; med worktree.baseRef: head bruges lokal HEAD.

Beslutningsmatrix: worktree, /bg, subagent eller Agent View

Det vigtigste

Fire Claude Code-mekanismer, der ofte forveksles. Worktree giver filisolering (disk). /bg giver en baggrundssession (kontekst og tokens). En subagent er en specialiseret engangsagent (prompt og værktøjer). Agent View er et dashboard over alle sessioner (UI). De kan kombineres: /bg opretter automatisk en worktree, en subagent med isolation: worktree starter i en midlertidig worktree, og Agent View viser alle tre som rækker på én liste.

VærktøjHvad det isolererHvornår det skal bruges
claude --worktree <name>Filer (separat mappe + gren)Du vil manuelt holde N sessioner kørende parallelt i forskellige terminaler
/bg (eller Ctrl+B)Kontekst og tidEn lang opgave, når du ikke vil blokere det aktuelle vindue. En worktree oprettes under motorhjelmen
Subagent med isolation: worktreeFiler i én sessionÉn prompt fordeler arbejde til N agenter, og du vil forhindre dem i at overskrive hinanden
claude agents (Agent View)Ingenting, det er et UIDu vil se alle kørende / satte på pause / afsluttede sessioner i ét dashboard
/goalStyring af autonomiDu vil have Claude til at arbejde, indtil en betingelse er opfyldt, uden prompts fra dig mellem ture

Typiske kombinationer:

  • “2 funktioner parallelt, manuelt” — to terminaler, der hver kører claude --worktree. Det enkleste tilfælde.
  • “Start en refaktorering natten over; jeg lukker appen” — /bg + /goal med en afslutningsbetingelse. Sessionen kører uafhængigt af dit vindue.
  • “Én prompt, tre parallelle undersøgelser” — tre subagenter med isolation: worktree. Hver i sin egen sandkasse.
  • “Hvad kører lige nu?” — claude agents. Et dashboard over alle sessioner med filtrene “running”, “blocked” og “done”.

5 faldgruber ved arbejde med worktrees

Det vigtigste

De mest almindelige problemer: Du glemmer .worktreeinclude, så miljøet ikke fungerer; du forveksler en worktree med en almindelig gren og mister ucommittede ændringer; du holder 5+ parallelle sessioner kørende og glemmer, hvad der foregår hvor; du undlader at konfigurere cleanupPeriodDays, så forældreløse mapper hober sig op; og du glemmer dialogen om tillid i en ny mappe, så --worktree fejler med en fejl.

1. Du startede en worktree, .env mangler, og intet virker. Det mest almindelige problem. En worktree er en frisk checkout uden Git-ignorerede filer. Løsningen er at føje en .worktreeinclude-fil med .env* og de nødvendige lokale konfigurationer til, så snart du sætter worktree-tilstanden op. Kontrollér, at filen ligger i repositoryts rodmappe, ikke i .claude/.

2. Du vil skifte til hovedgrenen, kører cd til rodmappen og mister dine ucommittede ændringer i worktreen. Rodmappen og worktreen er to forskellige arbejdskopier. Du gik tilbage med cd; ændringerne i worktreen blev, hvor de var—de forsvandt ikke. Men hvis du blev forvirret og kørte git stash i hovedmappen, fordi du troede, du var i worktreen, oprettes stashen på hovedgrenen, ikke på den gren, du forventede.

3. Du startede 5 parallelle sessioner og kan ikke huske, hvad hver enkelt laver. Anthropics dokumentation advarer udtrykkeligt om, at de fleste udviklere ikke mentalt kan håndtere mere end 2–3 sessioner. Et tegn på overbelastning er at åbne Agent View og ikke straks kunne sige, hvad hver agent laver. Begræns dig til to samtidige sessioner. Hvis opgaven kræver flere, bør den orkestreres via /goal + subagenter, ikke manuelt.

4. Worktrees fra -p (headless) ryddes ikke automatisk op. Kommandoen claude --worktree feature-x -p "do thing" viser ikke en interaktiv afslutningsprompt, så der kommer ikke et tidspunkt, hvor Claude spørger “fjern worktreen?”. Disse worktrees hober sig op. Ryd dem manuelt op: git worktree remove .claude/worktrees/feature-x. Eller brug et cron-script, der fjerner alt, der er ældre end 7 dage.

5. Tillidsdialog i en ny mappe. Hvis du åbner repositoryt for første gang og straks kører claude --worktree, fejler kommandoen. Kør claude uden flag, acceptér tillid til arbejdsområdet, og afslut—derefter virker --worktree. Det er tilsigtet, så Claude ikke får adgang til en andens projekt uden brugerens samtykke.

Oprydning: hvad slettes automatisk

Det vigtigste

En worktree fra --worktree uden ændringer (ingen commits, ikke-sporede filer eller ucommittede ændringer) fjernes automatisk, når du afslutter. Hvis der er ændringer, spørger Claude. Worktrees fra subagenter og /bg fjernes automatisk efter timeouten cleanupPeriodDays i indstillingerne, hvis de er rene. Worktrees fra -p ryddes slet ikke op—fjern dem manuelt med git worktree remove.

Oprydningslogikken afhænger af, hvad du har gjort i worktreen, og hvordan du startede sessionen. Anthropics dokumentation beskriver tre scenarier:

Hvis worktreen ikke har ucommittede ændringer, ikke-sporede filer eller nye commits, fjernes worktreen og dens gren automatisk, når du afslutter sessionen. Hvis sessionen har et navn, spørger Claude i stedet, så du kan beholde worktreen til senere.

— Anthropic Docs, https://code.claude.com/docs/en/worktrees

Scenarie 1: Du gik ind, gjorde ingenting og afsluttede—worktreen blev fjernet.

Scenarie 2: Du arbejdede lidt uden at committe—Claude spørger “behold eller fjern?”, når du afslutter. “Behold” gemmer mappen og grenen til senere. “Fjern” sletter mappen sammen med ucommittede ændringer og nye commits. Det er destruktivt—klik ikke på “fjern” af vane.

Scenarie 3: Du startede med -p (headless), og kommandoen blev færdig og afsluttet. Worktreen bliver liggende. Ryd den manuelt op:

git worktree remove .claude/worktrees/feature-x

Derudover fjernes worktrees fra subagenter og /bg-sessioner automatisk af baggrundsoprydningen, hvis de er ældre end cleanupPeriodDays dage (en indstilling, som normalt er 30 dage som standard) og ikke indeholder arbejde, der ikke er gemt. Worktrees fra --worktree berøres ikke af automatisk oprydning—du har selv ansvaret for dem.

Alternativer til SVN, Perforce og Mercurial: hooken WorktreeCreate

Det vigtigste

Worktree-tilstand bruger som standard git worktree. Til SVN, Perforce, Mercurial og andre versionsstyringssystemer kan du tilslutte din egen mekanisme via hookene WorktreeCreate og WorktreeRemove i Claude Code-indstillingerne. Hooken modtager navnet på stdin, skal udskrive stien til den oprettede mappe og afslutte med kode 0. Når du bruger din egen hook, behandles .worktreeinclude ikke—du skal selv kopiere lokale filer i hooken.

Hvis repositoryt bruger Subversion eller Mercurial, virker flaget --worktree ikke direkte. Anthropic tilbyder et udvidelsespunkt via to hooks: WorktreeCreate (opretter en isoleret kopi) og WorktreeRemove (fjerner den).

Eksempel på SVN-hook fra den officielle dokumentation:

{
  "hooks": {
    "WorktreeCreate": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'NAME=$(jq -r .name); DIR=\"$HOME/.claude/worktrees/$NAME\"; svn checkout https://svn.example.com/repo/trunk \"$DIR\" >&2 && echo \"$DIR\"'"
          }
        ]
      }
    ]
  }
}

Hooken læser worktree-navnet fra stdin ({ "name": "feature-auth" }), kører svn checkout til en forudberegnet mappe og udskriver stien på stdout—Claude Code bruger den som arbejdsmappe til den nye session.

En vigtig bemærkning: Når du bruger din egen hook, bruges .worktreeinclude ikke. Hvis du har brug for .env eller andre Git-ignorerede filer i den nye mappe, skal du kopiere dem i selve hook-scriptet.

Hvad nu: tre nært beslægtede mekanismer til parallelisme

Det vigtigste

Worktree giver filisolering. /bg giver isolering af kontekst og tokens. Subagent giver isolering af opgaver og værktøjer. /goal giver autonomi, indtil en betingelse er opfyldt. Hver mekanisme løser ét problem for sig. Sammen gør de det muligt at holde 3–5 parallelle opgaver i gang uden kognitivt sammenbrud. Læs videre i de relaterede vejledninger om autonom tilstand, brugerdefinerede subagenter og dynamiske workflows via linkene nedenfor.

Worktree giver filisolering. /bg giver kontekstisolering. Subagenter giver opgaveisolering. Hver mekanisme løser ét problem for sig. Sammen gør de det muligt at arbejde på tre til fem parallelle opgaver uden kognitivt sammenbrud. Det er værktøjskassen bag avanceret vibe-kodning i 2026.

Emnet fortsætter naturligt med tre relaterede emner: sådan opsætter du en autonom agent med /goal og Agent View, sådan bygger du dine egne subagenter til dine opgaver og sådan starter du hundredvis af agenter via Dynamic Workflows.

Åbn Ailoot.

Flere oplysninger

Spørgsmål og svar

Kopierer baseRef head ændringer uden commit til et nyt worktree?

Nej. Det starter fra det aktuelle lokale HEAD-commit inklusive lokale commits, som mangler på fjernserveren. Sporede ændringer uden commit bliver i originalkopien; overfør nødvendigt igangværende arbejde udtrykkeligt, og undersøg det nye worktree.

Hvorfor mangler .env i et nyt worktree?

Et worktree er en frisk checkout, så Git-ignorerede lokale filer mangler. Claude Codes .worktreeinclude opregner ignorerede filer, der skal kopieres; en brugerdefineret WorktreeCreate-hook skal selv håndtere kopieringen. Medtag kun filer, opgaven faktisk kræver.

Alle artikler