Blogg

Git worktree i Claude Code: parallelle økter

Markdown

Slik bruker du --worktree, .worktreeinclude, worktree.baseRef og isolering av subagenter. Forskjeller fra branches, opprydding av worktrees og vanlige feil.

Les hele artikkelen

Praktisk informasjon om å jobbe med Ailoot finner du i dokumentasjonen.

Hva er en git worktree i Claude Code

Hovedpoeng

En Git worktree er en separat arbeidsmappe for en annen branch i det samme repositoryet. Kommandoen claude --worktree <name> oppretter automatisk en worktree i .claude/worktrees/<name>/ og starter Claude Code der. To terminaler → to økter → ulike filer på disk, uten å forstyrre hverandre. Tilgjengelig som standard i Claude Code v2.0+, og kan konfigureres med .worktreeinclude for hemmeligheter og worktree.baseRef for å velge basebranch.

Å starte flere agenter parallelt i samme mappe er det grunnleggende problemet med vibe-koding i 2026-tempo. AI-agenter skriver kode raskere enn et menneske klarer å holde oversikt over hvem som jobber med hva. Uten filisolering ender det med at den ene økten overskriver arbeidet til den andre når du starter to Claude Code-økter parallelt i én mappe.

Git worktree løser dette på filsystemnivå. Du har én hovedmappe der du jobber. Kommandoen claude --worktree feature-auth oppretter mappen .claude/worktrees/feature-auth/ på en separat branch og starter Claude Code der. Filene er isolert. Endringer i den ene økten er ikke synlige for den andre før du uttrykkelig fletter dem sammen.

Den offisielle dokumentasjonen fra Anthropic forklarer det slik:

Når hver Claude Code-økt kjører i sin egen worktree, påvirker redigeringer i én økt aldri filer i en annen. Du kan bygge en funksjon i én terminal og rette en feil i en annen.

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

Et tips til egenkontroll: Hvis du noen gang har fått en commit der halvparten av filene var noen andres arbeid, trenger du en worktree.

Hvordan git worktree skiller seg fra en vanlig branch

Hovedpoeng

En vanlig git checkout bytter arbeidskopien i den samme mappen – de gamle filene forsvinner fra disken til du går tilbake til branchen. git worktree add oppretter en andre mappe for en annen branch ved siden av den første. Begge branchene ligger på disken samtidig; du bytter mellom dem med en enkel cd. Under panseret finnes det ett .git-repository med delt historikk og en delt remote. Bare flere arbeidskopier.

Standard Git-flyt: Du er på branchen main og kjører git checkout feature-x – Git overskriver filene i arbeidskopien. En kjørende npm run dev slutter å fungere fordi package.json ble endret under den. Du stasher endringene du ikke har committet og venter på at IDE-en skal indeksere på nytt. Du bytter tilbake, og alt blir overskrevet igjen, så du må stashe og poppe på nytt.

Git worktree gir deg et annet alternativ: I stedet for å bytte én mappe mellom branches oppretter du en andre mappe for en annen branch. Kommandoen git worktree add ../project-feature-x feature-x oppretter katalogen ../project-feature-x/ med filene fra branchen feature-x. main forblir i den opprinnelige mappen, og utviklingsserveren fortsetter å kjøre.

Parametergit checkout-branchgit worktree add
Filer i arbeidskopienOverskrivesVises i en ny mappe
Parallelt arbeid på to branchesNeiJa
Endringer som ikke er committetTrenger git stashIngenting å gjøre
ByttehastighetAvhenger av størrelsen på endringeneBare cd
Diskplass1×N× (én kopi av filene per branch)

Tidligere måtte worktree-modus i Claude Code settes opp manuelt: git worktree add, så cd, så claude – og dette måtte gjentas i hver terminal. Flagget --worktree (også -w) gjør alle tre tingene i én kommando.

Start den første parallelle økten: flagget --worktree

Hovedpoeng

Kommandoen claude --worktree feature-auth oppretter en worktree i .claude/worktrees/feature-auth/, oppretter branchen worktree-feature-auth fra origin/HEAD og starter Claude Code der. Du trenger ikke å kjøre git worktree add eller cd manuelt. Gjenta kommandoen i terminalen ved siden av med et annet navn for å få to uavhengige økter. Hvis du utelater navnet (claude --worktree), lager Claude et tilfeldig navn som bright-running-fox.

Minimalt eksempel. Åpne den første terminalen i prosjektroten:

claude --worktree feature-auth

Claude Code gjør tre ting:

  1. Oppretter .claude/worktrees/feature-auth/ med et øyeblikksbilde av origin/HEAD (vanligvis standardbranchen din).
  2. Oppretter en ny branch worktree-feature-auth.
  3. Starter økten i denne mappen.

Åpne en andre terminal i den samme rotmappen til repositoryet:

claude --worktree bugfix-123

Ferdig. To Claude Code-økter, ulike filer på disk, ulike Git-branches. Hvis du skriver autentisering i den første og retter en test som feiler i den andre, kan de fysisk ikke komme i veien for hverandre.

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

claude --worktree
# → oppretter noe som .claude/worktrees/bright-running-fox/

Et tips til nybegynnere med Git: Legg .claude/worktrees/ til i .gitignore. Ellers ser du innholdet i alle worktrees som ikke-sporede filer når du kjører git status i hovedmappen:

# .gitignore
.claude/worktrees/

En fallgruve du bør unngå: Før du starter --worktree for første gang i en ny mappe, åpner du vanlig claude (uten flagget) og godtar dialogen for tillit til arbeidsområdet. Hvis du ikke gjør det, mislykkes flagget med feilen “trust not accepted” – også hvis du kombinerer det med -p for headless-modus.

Hvor worktrees ligger, og hvordan du finner dem

Hovedpoeng

Som standard ligger alle worktrees i .claude/worktrees/<name>/ ved siden av repositoryets rotmappe. Kjør git worktree list for å se listen. Bruk cd .claude/worktrees/feature-auth for å gå inn i en worktree manuelt. Hvis du vil bytte worktree i en Claude-økt, ber du den om å «bytte til en annen worktree»; da bruker den det innebygde EnterWorktree-verktøyet. Den gamle worktreen forblir urørt på disken.

Standardplasseringen er fast: .claude/worktrees/<value>/ i repositoryets rotmappe. Hvis prosjektet ditt ligger i ~/dev/my-app/, ligger worktreen feature-auth i ~/dev/my-app/.claude/worktrees/feature-auth/.

For avvikende oppsett (for eksempel hvis du vil ha worktreen utenfor repositoryet) finnes hooken WorktreeCreate – mer om den nedenfor i delen om SVN og Mercurial.

I én Claude-økt kan du bytte til en annen eksisterende worktree. Bare si i chatten: «bytt til .claude/worktrees/bugfix-123», så kaller Claude verktøyet EnterWorktree. Den gjeldende mappen forblir urørt – du kan gå tilbake på samme måte.

Standard Git-kommandoen viser en liste over alle worktrees, både hovedworktreen og dem som er opprettet manuelt:

git worktree list

Resultatet ser omtrent slik ut:

/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]

Kopier .env og hemmeligheter: filen .worktreeinclude

Hovedpoeng

En worktree er en fersk checkout. Filer fra .gitignore (.env, .env.local, lokale konfigurasjoner) mangler i den nye mappen. Uten dem fungerer ikke npm run dev eller prisma db push. Filen .worktreeinclude i prosjektroten bruker .gitignore-syntaks og forteller Claude Code hvilke filer som automatisk skal kopieres til hver nye worktree. Den brukes for --worktree, subagent-worktrees og økter i skrivebordsappen.

Når --worktree oppretter en ny mappe, får den bare det som er committet til Git. .env med API-nøkler og .env.local med lokal konfigurasjon ligger i .gitignore, så de finnes ikke i worktreen. Dermed feiler den aller første npm run dev med “MISSING DATABASE_URL”.

Den hjemmelagde løsningen er å kopiere .env manuelt etter hver --worktree. Det fungerer én gang og blir så glemt. Anthropics løsning er en fil .worktreeinclude i prosjektroten som lister opp filene Git ignorerer, slik at de kopieres automatisk til hver nye worktree.

Opprett en .worktreeinclude-fil i repositoryroten:

.env
.env.local
config/secrets.json

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

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

Anthropic gir en tydelig regel for å forhindre uhell:

Filen bruker gitignore-syntaks. Bare filer som samsvarer med mønsteret og samtidig ignoreres av Git, kopieres. Filer som spores av Git, blir aldri kopiert flere ganger.

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

Med andre ord kan du ikke ved et uhell kopiere package.json via .worktreeinclude – den ligger ikke i .gitignore. Det er trygt å legge inn hvilke som helst mønstre der.

Den samme .worktreeinclude fungerer i tre moduser: manuell --worktree, automatiske worktrees for subagenter (se nedenfor) og økter fra Claude-skrivebordsappen.

Worktree fra en pull request for kodegjennomgang

Hovedpoeng

Kommandoen claude --worktree "#1234" henter pull request #1234 fra origin og oppretter en worktree med PR-branchen i .claude/worktrees/pr-1234/. Du kan oppgi hele URL-en: claude --worktree https://github.com/OWNER/REPO/pull/1234. Nyttig for kodegjennomgang: åpne PR-en i sin egen mappe, så kan Claude kjøre tester, lese logger og skrive en kommentar mens hovedrepositoryet forblir urørt.

Et vanlig scenario for kodegjennomgang: En kollega har sendt en PR, og du må undersøke koden, kjøre tester og legge igjen en kommentar. Med en vanlig git checkout pull/1234/head bytter du arbeidskopien igjen og avbryter den aktive økten.

Med flagget --worktree gjør du dette med én kommando:

claude --worktree "#1234"

Dette skjer: Claude Code kjører git fetch origin pull/1234/head, oppretter en worktree i .claude/worktrees/pr-1234/ og sjekker ut PR-branchen. Økten starter. Du kan straks be den om å «lese diffen, kjøre testene og finne logiske feil» – mens Claude jobber, fortsetter hovedøkten din på main å kjøre.

Den alternative syntaksen er hele URL-en til pull requesten:

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

Bruk i et faktisk prosjekt: Kombinerer du claude --worktree "#N" med din egen subagent for kodegjennomgang, får du en automatisk gjennomgang på et minutt eller to. Start den i bakgrunnen, fortsett arbeidet i hovedvinduet og gå tilbake til resultatet via claude agents.

Basebranch: worktree.baseRef for fresh eller head

Hovedpoeng

Som standard opprettes en branch for worktreen fra origin/HEAD – den sist synkroniserte commiten fra remote. Det gir en trygg, «ren» start. Vil du inkludere lokale, ikke-pushede commits, setter du worktree.baseRef: "head". HEAD identifiserer en commit. Ucommittede sporede endringer blir i originalarbeidskopien og krever separat eksplisitt overføring. Nyttig når en subagent skal arbeide videre på den gjeldende funksjonen din uten å bytte til main. Den godtar bare fresh eller head; vilkårlige refs støttes ikke.

Standardinnstillingen er slik: Hver nye worktree starter fra origin/HEAD. Fordelen er en ren start som garantert samsvarer med det CI vil se. Ulempen er at hvis du har endringer som ikke er committet, eller flere lokale commits foran remote på den gjeldende branchen, blir de ikke inkludert i den nye worktreen.

For oppstart av et worktree fra nåværende lokal HEAD-commit legger du dette i .claude/settings.json eller globale innstillinger:

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

Nå starter claude --worktree experimental-feature fra gjeldende lokal HEAD. Det er nyttig når funksjonen allerede har lokale commits som ikke er pushet. Det inkluderer ikke sporede endringer som fortsatt er ucommittede. Trenger subagenten dem, bevar og overfør nødvendige endringer eksplisitt og undersøk måldiffen. Ikke forveksle overføringen med .worktreeinclude, som håndterer ignorerte lokale filer.

Innstillingen godtar nøyaktig to verdier: "fresh" (= origin/HEAD) og "head" (= lokal HEAD). Vilkårlige refs som "feature-branch" eller en commit-hash støttes ikke – dette er en bevisst begrensning for å unngå en kombinatorisk eksplosjon av valgmuligheter.

Isoler subagenter automatisk: isolation: worktree

Hovedpoeng

En subagent i Claude Code er en spesialisert agent som utfører én oppgave (kodegjennomgang, refaktorering, research). Hvis du starter flere subagenter parallelt fra én økt, arbeider de som standard i samme mappe og kan overskrive hverandres filer. Legg til isolation: worktree i subagentens frontmatter for å gi hver av dem en midlertidig worktree, som ryddes bort når den er ferdig hvis den ikke har committet noe.

Når du ber Claude «start tre subagenter: én leser databasen, den andre ser på API-et og den tredje sjekker testene», jobber alle tre som standard i arbeidskopien din. Hvis bare to av dem skriver til samme fil samtidig, oppstår det en konflikt. Løsningen er å gi hver av dem sin egen worktree automatisk.

Metode 1: be om det muntlig. Skriv til Claude i samtalen:

Use worktrees for your agents.

Claude vil bruke isolering for alle senere subagenter i denne økten.

Metode 2: angi det eksplisitt i selve subagenten. I subagentfilen (for eksempel .claude/agents/code-reviewer.md) legger du til et felt i frontmatter:

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

You're a meticulous reviewer. Read the diff and look for logic errors...

Nå får subagenten en midlertidig worktree i .claude/worktrees/ hver gang den startes. Hvis subagenten ikke skrev noe, slettes mappen automatisk når den er ferdig. Hvis det finnes endringer som ikke er committet, spør Claude om du vil beholde eller fjerne dem.

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

Beslutningsmatrise: worktree, /bg, subagent eller Agent View

Hovedpoeng

Fire Claude Code-mekanismer som ofte forveksles. Worktree er filisolering (disk). /bg er en bakgrunnsøkt (kontekst og tokens). Subagent er en spesialisert engangsagent (prompt og verktøy). Agent View er et dashbord for alle økter (UI). De kan kombineres: /bg oppretter automatisk en worktree, en subagent med isolation: worktree starter i en midlertidig worktree, og Agent View viser alle tre som rader i én liste.

VerktøyHva det isolererNår du bør bruke det
claude --worktree <name>Filer (egen mappe + branch)Du vil manuelt holde N økter i gang parallelt i forskjellige terminaler
/bg (eller Ctrl+B)Kontekst og tidEn lang oppgave når du ikke vil blokkere det gjeldende vinduet. En worktree opprettes under panseret
Subagent med isolation: worktreeFiler innenfor én øktÉn prompt fordeler arbeid til N agenter, og du vil hindre dem i å overskrive hverandres filer
claude agents (Agent View)Ingenting, det er et UIDu vil se alle kjørende / satte på pause / fullførte økter i ett dashbord
/goalAutonomistyringDu vil at Claude skal jobbe til en betingelse er oppfylt, uten at du trenger å sende prompts mellom turene

Typiske kombinasjoner:

  • «2 funksjoner parallelt, manuelt» – to terminaler, hver med claude --worktree. Det enkleste tilfellet.
  • «Start en refaktorering over natten; jeg lukker appen» – /bg + /goal med et fullføringsvilkår. Økten kjører uavhengig av vinduet ditt.
  • «Én prompt, tre parallelle undersøkelser» – tre subagenter med isolation: worktree. Hver i sin egen sandbox.
  • «Hva kjører akkurat nå?» – claude agents. Et dashbord over alle økter med filtrene «running», «blocked» og «done».

5 fallgruver ved arbeid med worktrees

Hovedpoeng

De vanligste problemene: å glemme .worktreeinclude, slik at miljøet ikke fungerer; å forveksle en worktree med en vanlig branch og miste endringer som ikke er committet; å holde 5+ parallelle økter og glemme hva som skjer hvor; å la være å konfigurere cleanupPeriodDays, slik at ubrukte mapper hoper seg opp; og å glemme tillitsdialogen i en ny mappe, slik at --worktree mislykkes med en feilmelding.

1. Worktreen er startet, .env mangler, ingenting fungerer. Det vanligste problemet. En worktree er en fersk checkout uten filer som Git ignorerer. Løsningen er å legge til en .worktreeinclude-fil med .env* og nødvendige lokale konfigurasjoner så snart du setter opp worktree-modus. Sjekk at filen ligger i repositoryroten, ikke i .claude/.

2. Du vil bytte til main-branchen, kjører cd til roten og tror du mister endringene som ikke er committet i worktreen. Rotmappen og worktreen er forskjellige arbeidskopier. Du gikk tilbake med cd; endringene i worktreen ble værende der – de forsvant ikke. Men hvis du blir forvirret og kjører git stash i hovedmappen fordi du tror du er i worktreen, opprettes stashen på main-branchen, ikke på branchen du forventet.

3. Du startet 5 parallelle økter og husker ikke hva hver av dem gjør. Anthropics dokumentasjon advarer uttrykkelig om at de fleste utviklere ikke klarer å håndtere mer enn 2–3 økter mentalt. Et tegn på overbelastning er at du åpner Agent View og ikke umiddelbart kan si hva hver agent gjør. Begrens deg til to samtidige økter. Hvis oppgaven krever flere, bør den orkestreres gjennom /goal + subagenter, ikke manuelt.

4. Worktrees fra -p (headless) ryddes ikke automatisk. Kommandoen claude --worktree feature-x -p "do thing" viser ikke en interaktiv avslutningsprompt, så Claude får aldri anledning til å spørre «fjerne worktreen?». Disse worktree-ene hoper seg opp. Rydd dem manuelt: git worktree remove .claude/worktrees/feature-x. Eller bruk et cron-skript som fjerner alt som er eldre enn 7 dager.

5. Tillitsdialog i en ny mappe. Hvis du åpner repositoryet for første gang og straks kjører claude --worktree, mislykkes kommandoen. Kjør claude uten flagg, godta tillit til arbeidsområdet og avslutt – da vil --worktree fungere. Dette er tilsiktet, slik at Claude ikke får tilgang til andres prosjekt uten brukerens samtykke.

Opprydding: hva som slettes automatisk

Hovedpoeng

En worktree fra --worktree uten endringer (ingen commits, ikke-sporede filer eller endringer som ikke er committet) fjernes automatisk når du avslutter. Hvis det finnes endringer, spør Claude. Worktrees fra subagenter og /bg fjernes automatisk av tidsavbruddet cleanupPeriodDays i innstillingene hvis de er rene. Worktrees fra -p ryddes ikke i det hele tatt – fjern dem manuelt med git worktree remove.

Oppryddingslogikken avhenger av hva du har gjort i worktreen og hvordan du startet økten. Anthropics dokumentasjon beskriver tre scenarioer:

Hvis worktreen ikke har endringer som ikke er committet, ikke-sporede filer eller nye commits, fjernes worktreen og branchen automatisk når du avslutter økten. Hvis økten har et navn, spør Claude i stedet for å fjerne den, slik at du kan beholde worktreen til senere.

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

Scenario 1: Du gikk inn, gjorde ingenting og avsluttet – worktreen ble fjernet.

Scenario 2: Du gjorde litt arbeid uten å committe det – Claude spør «beholde eller fjerne?» når du avslutter. «Behold» lagrer mappen og branchen til senere. «Fjern» sletter katalogen sammen med endringer som ikke er committet og nye commits. Dette er destruktivt – ikke klikk på «fjern» av gammel vane.

Scenario 3: Du startet med -p (headless), og kommandoen ble fullført og avsluttet. Worktreen blir liggende. Rydd den manuelt:

git worktree remove .claude/worktrees/feature-x

I tillegg fjernes worktrees fra subagenter og /bg-økter automatisk av opprydding i bakgrunnen hvis de er eldre enn cleanupPeriodDays dager (en innstilling som vanligvis er 30 dager som standard) og ikke har arbeid som ikke er lagret. Worktrees fra --worktree berøres ikke av automatisk opprydding – de er ditt ansvar.

Alternativer for SVN, Perforce og Mercurial: hooken WorktreeCreate

Hovedpoeng

Worktree-modus bruker git worktree som standard. For SVN, Perforce, Mercurial og andre VCS-er kan du koble til din egen mekanisme gjennom hookene WorktreeCreate og WorktreeRemove i Claude Code-innstillingene. Hooken mottar navnet på stdin, må skrive ut banen til den opprettede katalogen og avslutte med kode 0. Når du bruker din egen hook, behandles ikke .worktreeinclude – du må selv kopiere lokale filer i hooken.

Hvis repositoryet bruker Subversion eller Mercurial, fungerer ikke flagget --worktree direkte. Anthropic tilbyr et utvidelsespunkt gjennom to hooks: WorktreeCreate (oppretter en isolert kopi) og WorktreeRemove (fjerner den).

Eksempel på SVN-hook fra den offisielle dokumentasjonen:

{
  "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 leser worktree-navnet fra stdin ({ "name": "feature-auth" }), kjører svn checkout i en forhåndsbestemt mappe og skriver banen til stdout – Claude Code bruker den som arbeidsmappe for den nye økten.

En viktig merknad: Når du bruker din egen hook, brukes ikke .worktreeinclude. Hvis du trenger .env eller andre filer som Git ignorerer i den nye mappen, må du kopiere dem i selve hook-skriptet.

Hva nå: tre nærliggende mekanismer for parallellisering

Hovedpoeng

Worktree gir filisolering. /bg gir isolering av kontekst og tokens. Subagent gir isolering av oppgaver og verktøy. /goal gir autonomi fram til en betingelse er oppfylt. Hver av dem løser ett problem alene. Sammen gjør de det mulig å holde 3–5 parallelle oppgaver gående uten å miste oversikten. Deretter er det naturlig å utforske de relaterte veiledningene om autonom modus, tilpassede subagenter og dynamiske arbeidsflyter via lenkene nedenfor.

Worktree gir filisolering. /bg gir kontekstisolering. Subagenter gir oppgaveisolering. Hver mekanisme løser ett problem alene. Sammen gir de en måte å jobbe med tre til fem parallelle oppgaver på uten å miste oversikten. Dette er ferdighetene bak avansert vibe-koding i 2026.

Dette temaet fortsetter naturlig med tre beslektede emner: slik setter du opp en autonom agent med /goal og Agent View, slik bygger du dine egne subagenter for oppgavene dine og slik starter du hundrevis av agenter gjennom Dynamic Workflows.

Åpne Ailoot.

Flere detaljer

Spørsmål om denne veiledningen: Git worktree i Claude Code: parallelle økter

Kopierer baseRef head ucommittede endringer til et nytt worktree?

Nei. Det starter fra lokal HEAD-commit, inkludert lokale commits som mangler hos remote. Ucommittede sporede endringer blir i originalkopien. Overfør nødvendig WIP eksplisitt og undersøk nytt worktree.

Hvorfor mangler .env i et nytt worktree?

Worktree er ny utsjekking, så Git-ignorerte lokale filer mangler. Claude Codes .worktreeinclude lister ignorerte filer som skal kopieres. Egendefinert WorktreeCreate-hook må håndtere kopiering selv. Inkluder bare filer oppgaven trenger.

Alle artikler