Langsung ke konten utama
git worktree adalah direktori kerja terpisah dengan file dan branch sendiri, berbagi riwayat repositori dan remote yang sama dengan checkout utama Anda. Menjalankan setiap sesi Claude Code dalam worktree-nya sendiri memberikan salinan file terpisah untuk diedit, sehingga satu sesi dapat membangun fitur sementara sesi kedua memperbaiki bug.
Jika Anda menggunakan sistem kontrol versi lain atau aplikasi desktop, ikuti instruksi untuk pengaturan Anda:
Worktrees adalah salah satu dari beberapa cara untuk menjalankan Claude secara paralel. Mereka mengisolasi edit file. Subagents membagi pekerjaan di dalam satu sesi, dan cross-session messaging memungkinkan Claude melewatkan temuan antar sesi di worktrees Anda. Lihat Run agents in parallel untuk membandingkan pendekatan, atau lompat ke Isolate subagents with worktrees untuk menggunakan worktrees dan subagents bersama-sama. Sebagian besar sesi hanya memerlukan dua bagian pertama: mulai Claude dalam worktree, kemudian bersihkan saat Anda keluar. Kembali ke sisa halaman saat Anda perlu melanjutkan sesi, mengubah cara worktrees dibuat, atau debug kegagalan.

Mulai Claude dalam worktree

Lewatkan --worktree atau -w dengan nama untuk membuat worktree terisolasi dan memulai Claude di dalamnya. Secara default, worktree dibuat di bawah .claude/worktrees/<name>/ di root repositori Anda, pada cabang baru bernama worktree-<name>:
Jalankan perintah lagi dengan nama berbeda di terminal lain untuk memulai sesi terisolasi kedua. Jika Anda menghilangkan nama, Claude menghasilkan satu seperti bright-running-fox. Jalankan interaktif memerlukan workspace trust: jika Anda belum menjalankan Claude di direktori sebelumnya, jalankan claude sekali di sana untuk menerima dialog kepercayaan, atau --worktree keluar dengan kesalahan yang meminta Anda untuk melakukannya. Jalankan non-interaktif dengan -p melewati pemeriksaan kepercayaan, jadi claude -p --worktree melanjutkan tanpanya.
Tambahkan .claude/worktrees/ ke .gitignore Anda sehingga konten worktree tidak muncul sebagai file yang tidak dilacak dalam checkout utama Anda.

Atur lingkungan worktree

Worktree adalah checkout segar, jadi inisialisasi lingkungan pengembangan Anda di sana: minta Claude untuk menginstal dependensi, atau jalankan setup proyek Anda sendiri di direktori worktree di bawah .claude/worktrees/. Untuk membawa file yang diabaikan git seperti .env ke setiap worktree baru secara otomatis, tambahkan file .worktreeinclude.

Minta Claude untuk membuat worktree

Anda juga dapat meminta Claude untuk “bekerja dalam worktree” selama sesi, dan itu membuat satu dengan tool EnterWorktree. Setelah berada dalam worktree, Claude dapat beralih langsung ke worktree lain di bawah .claude/worktrees/ dengan memanggil EnterWorktree dengan jalur target; worktree sebelumnya tetap berada di disk tanpa disentuh. Saat Claude memasuki jalur di luar direktori .claude/worktrees/ repositori, Claude Code meminta persetujuan Anda terlebih dahulu. Perpindahan tersebut membawa direktori kerja sesi, akses tulis, dan konfigurasi proyek seperti CLAUDE.md dan pengaturan ke lokasi tersebut. Aturan izin EnterWorktree atau memilih “jangan tanya lagi” tidak menekan dialog izin ini; hanya mode bypassPermissions yang melewatinya.
Jalur hook tidak mengikuti worktree. Setelah Claude memasuki worktree, Claude Code menyimpan ${CLAUDE_PROJECT_DIR} dalam hooks Anda di mana itu berada dan melewatkan jalur worktree kepada mereka dengan cara berbeda:
  • ${CLAUDE_PROJECT_DIR} tetap di tempat: itu masih menunjuk ke root proyek di mana sesi dimulai, jadi perintah hook seperti ${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh masih menjalankan skrip dalam checkout utama.
  • cwd mengikuti Claude: field cwd dalam input JSON hook adalah root worktree, dan itu bergerak lagi saat Claude menjalankan cd. Bacanya saat hook memerlukan jalur worktree.

Claude tidak memiliki tool EnterWorktree

Jika Anda meminta Claude untuk bekerja dalam worktree dan Claude tidak memiliki tool EnterWorktree atau ExitWorktree, periksa apakah permissions.blockWritesOutsideWorkingDirectories aktif. Setelah key tersebut aktif, Claude Code menghapus kedua tool worktree atau menolak panggilan ke tool tersebut. Anda tetap dapat bekerja dalam worktree selama key tersebut aktif:
  • Sesi interaktif: mulai sesi dalam worktree dengan claude --worktree.
  • Sesi latar belakang: Claude Code menolak pengeditan sesi latar belakang di checkout utama Anda hingga sesi tersebut memanggil EnterWorktree, yang tidak dimilikinya. Salah satu dari cara berikut memungkinkan sesi untuk mengedit:
    • Mulai sesi dengan claude --bg --worktree
    • Atur worktree.bgIsolation ke "none"
    • Minta Claude mengedit dalam worktree yang dibuat dengan git worktree add di bawah direktori tempat sesi dimulai
Untuk mendapatkan kembali tool tersebut, jalankan /status dalam sesi untuk menampilkan daftar sumber pengaturan yang dimuatnya, lalu hapus key tersebut dari setiap file yang mengaturnya. Kemudian mulai ulang Claude Code. Jika pengaturan terkelola mengatur key tersebut, tanyakan kepada administrator Anda apakah kebijakan tersebut perlu diubah.

Bersihkan worktrees

Saat Anda keluar dari sesi worktree interaktif, Claude memeriksa worktree untuk pekerjaan yang akan dihapus oleh penghapusan: file yang diubah atau tidak dilacak, pekerjaan yang tidak dikomitkan di dalam submodul yang diperiksa, dan commit baru. Aturan ini berlaku untuk worktrees yang Claude buat dengan git. Untuk worktree yang dibuat oleh hook WorktreeCreate Anda, lihat WorktreeRemove sebagai gantinya.
  • Worktree bersih: untuk sesi tanpa nama, Claude menghapus worktree dan cabangnya secara otomatis. Sesi bernama meminta Anda terlebih dahulu sehingga Anda dapat menyimpan worktree untuk nanti
  • Worktree memiliki pekerjaan di dalamnya: Claude meminta Anda untuk menyimpan atau menghapus worktree. Menyimpan mempertahankan direktori dan cabang. Untuk kembali nanti, jalankan perintah claude --worktree <name> --resume yang dicetak Claude Code saat keluar. Menghapus menghapus direktori worktree dan cabangnya, bersama dengan semua pekerjaan di dalamnya
  • Branch lain sedang di-checkout: jika worktree berada pada branch selain branch miliknya sendiri yang memiliki commit melewati commit awal worktree, Claude meminta Anda untuk menyimpan atau menghapus worktree. Jawaban mana pun tetap menyimpan branch lain tersebut beserta commit-nya. Menghapus menghapus direktori worktree dan branch milik worktree itu sendiri, yaitu branch yang Claude buat bersamanya
  • Status worktree tidak dapat diverifikasi: ketika Claude Code tidak dapat menghitung perubahan worktree atau tidak dapat memeriksa checkout submodulnya, Claude meminta Anda daripada menghapus worktree secara otomatis. Prompt tersebut menyebutkan apa yang tidak dapat diperiksa
Jalankan non-interaktif dengan -p tidak memiliki prompt keluar, jadi Claude tidak membersihkan worktrees mereka, dan Claude Code meninggalkan kunci yang diambilnya pada setiap satu saat pembuatan di tempat sampai sapuan kunci basi sesi nanti melepaskannya. Untuk menghapus satu, jalankan git worktree remove; jika git menolak karena worktree terkunci, jalankan git worktree unlock padanya terlebih dahulu. Di Windows, menghapus worktree tidak menghapus file di luar itu. Jika folder di dalam worktree adalah tautan ke tempat lain, seperti junction NTFS atau symlink direktori, Claude Code hanya menghapus tautannya.

Lanjutkan sesi worktree

Saat Anda melanjutkan sesi yang berakhir di dalam worktree tanpa keluar darinya, Claude Code mengembalikan sesi ke worktree itu. Ini berlaku untuk resume interaktif, untuk --continue dan --resume dalam mode non-interaktif dengan -p, dan untuk Agent SDK. --continue memilih sesi paling baru yang tercatat di bawah direktori tempat Anda meluncurkan. Kembali di dalam worktree, Claude dapat keluar dengan tool ExitWorktree jika sesi memiliki tool tersebut. Sebelum mengembalikan sesi ke worktree-nya, Claude Code memverifikasi bahwa worktree masih merupakan checkout terpisah dari yang utama, dan menolak untuk memasuki kembali worktree yang gagal pemeriksaan. Untuk git worktree, pemeriksaan membaca metadata git-nya. Worktree tanpa metadata git, seperti yang dibuat hook WorktreeCreate, dapat lulus pemeriksaan; kasus yang Claude Code masih tolak tercantum dengan pemulihan mereka di bawah Claude Code refuses to use a worktree. Untuk pesan dan cara memulihkan dari masing-masing, lihat The session resumes outside its worktree. Di mana Anda meluncurkan, dan bagaimana Anda melanjutkan, mengubah apa yang Claude Code masuki kembali:
  • Direktori peluncuran: lanjutkan dengan --resume dari checkout utama atau direktori lain dari repositori. Claude Code memasuki kembali worktree yang dibuat dengan git di bawah .claude/worktrees/ bahkan saat Anda meluncurkan dari dalamnya. Saat Anda meluncurkan dari dalam worktree lain, Claude Code memasuki kembali hanya jika dapat menjaminnya dari sana: worktree yang merupakan repositorinya sendiri, satu tanpa metadata git, atau peluncuran dari subdirektori worktree yang Anda buat dengan git worktree add menolak, jadi luncurkan dari checkout utama.
  • --fork-session: sesi yang di-fork dimulai di direktori tempat Anda meluncurkan Claude, dan Claude Code meninggalkan worktree sesi asli tanpa disentuh.
  • Worktree yang dihapus: jika direktori worktree tidak lagi ada, Claude Code melanjutkan sesi di direktori tempat Anda meluncurkan Claude. Itu memberi tahu Anda worktree hilang dan menghapus pengikatan worktree sesi.
Sebelum v2.1.212, resume non-interaktif tetap berada di direktori awal dan ExitWorktree melaporkan bahwa tidak ada sesi worktree aktif untuk keluar.
Saat Claude memasuki atau keluar dari worktree yang dibuat Claude Code dengan git, transkrip ikut berpindah. Claude Code merekam sesi di bawah direktori kerja baru sesi, dengan cara yang sama seperti /cd melakukannya, jadi /desktop dan --resume menemukannya di sana. Keluar memindahkannya kembali dengan cara yang sama. Worktree yang dibuat oleh hook WorktreeCreate menyimpan transkrip di direktori peluncuran.

Cara Claude Code menerapkan isolasi

Selama sebuah sesi diisolasi dalam worktree, Claude Code memblokir panggilan tool yang didefinisikan oleh pemeriksaan di bawah ini. Aturan yang sama berlaku baik Anda memulai sesi dengan --worktree, Claude memasuki worktree dengan EnterWorktree, maupun Anda melanjutkan sesi worktree. Penerapan yang sama mencakup setiap subagent yang dibuat Claude dari sesi yang terisolasi. Penerapan ini berlaku baik sesi tersebut interaktif maupun berjalan di latar belakang. Subagent yang berjalan di worktree mereka sendiri membawa pemeriksaan yang sama. Riwayat versinya ada di bagian Menulis file subagent. Claude Code menerapkan empat pemeriksaan:
  • Pengeditan file: Claude Code memblokir Edit, Write, atau NotebookEdit yang menargetkan path di checkout utama. Untuk mengubah file di checkout utama, edit sendiri file tersebut atau mulai sesi interaktif di sana.
  • Direktori kerja perintah: Claude Code memblokir perintah Bash, PowerShell, atau Monitor yang direktori kerjanya di-resolve ke checkout utama, atau yang direktori kerjanya tidak dapat diverifikasi tetap berada di luarnya.
  • Pengalihan Git: Claude Code memblokir perintah Bash atau Monitor yang mengalihkan git ke checkout utama. Pengalihan tersebut dapat terjadi melalui git -C, --git-dir, variabel GIT_DIR atau GIT_WORK_TREE, atau cd ke checkout utama sebelum menjalankan git.
  • Bentuk perintah: Claude Code memblokir perintah Bash atau Monitor ketika tidak dapat memverifikasi dari teks perintah bahwa setiap git yang dijalankan perintah tersebut tetap berada di dalam worktree. Hal ini terjadi, misalnya, ketika nama perintah dihitung saat runtime, ketika sintaksisnya tidak dapat di-parse, atau ketika ekspansi seperti ${!name} atau ${ command; } dapat menjalankan perintah yang tidak tertulis secara eksplisit dalam teks. Claude Code memberi tahu Claude cara menulis ulang perintah yang ditolak, misalnya dengan memecahnya menjadi perintah-perintah sederhana yang terpisah. Anda tidak dapat mematikan pemeriksaan ini.
Pemeriksaan-pemeriksaan ini membaca path yang ditargetkan oleh pengeditan, direktori tempat perintah dijalankan, dan teks perintah. Tidak satu pun dari pemeriksaan tersebut melacak file mana yang ditulis oleh perintah shell, sehingga perintah yang menulis ke checkout utama tanpa menjalankan git di sana, seperti cp atau pengalihan shell, tidak ditolak oleh pemeriksaan tersebut. Claude Code memperlakukan perintah tersebut seperti perintah shell lainnya di bawah pengaturan izin dan sandboxing Anda. Pemeriksaan ini berlaku untuk repositori tempat Anda meluncurkan Claude Code. Pemeriksaan ini juga mencakup checkout utama yang ditautkan dengan worktree tertaut. Untuk perintah PowerShell, Claude Code hanya menerapkan pemeriksaan direktori kerja. Claude melihat setiap penolakan sebagai error tool yang menyebutkan nama worktree dan menjelaskan cara melanjutkan. Untuk perintah yang ditolak, lihat arti pesan penolakan dan cara mengatasinya.

Isolasi subagents dengan worktrees

Subagents dapat berjalan dalam worktrees mereka sendiri sehingga edit paralel tidak bertabrakan. Minta Claude untuk “gunakan worktrees untuk agen Anda”, atau buat isolasi permanen untuk subagent kustom dengan menambahkan isolation: worktree ke frontmatter-nya. Subagent ini di .claude/agents/ selalu berjalan dalam worktree-nya sendiri:
Setiap subagent mendapatkan worktree sementara yang Claude Code hapus secara otomatis saat subagent selesai tanpa perubahan; worktree dengan perubahan tetap berada di disk sampai sapuan berkala di bawah dapat menghapusnya tanpa kehilangan pekerjaan. Untuk worktree yang dibuat oleh hook WorktreeCreate Anda, lihat WorktreeRemove sebagai gantinya. Worktrees subagent menggunakan cabang dasar yang sama dengan --worktree, jadi mereka membuat cabang dari cabang default repositori Anda kecuali worktree.baseRef diatur ke "head". Subagent dalam worktree-nya sendiri mengambil file instruksi yang dimuat saat mulai dari percakapan utama Anda, bukan dari worktree-nya. Saat worktree tersebut berada di lokasi default di bawah .claude/worktrees/, subagent juga tidak memuat file CLAUDE.md atau direktori .claude/rules/ di root worktree saat membaca file di sana, meskipun keduanya berbeda pada branch worktree tersebut.

Bersihkan subagent dan worktrees sesi latar belakang

Claude Code menjalankan sapuan berkala yang menghapus worktrees yang dibuat Claude untuk subagents dan sesi latar belakang setelah mereka lebih tua dari pengaturan cleanupPeriodDays Anda, mengikuti aturan sapuan retensi. Saat Anda mengirim ke latar belakang sesi --worktree, worktree-nya menjadi worktree sesi latar belakang yang dapat dihapus sapuan. Sapuan meninggalkan worktree di tempat dalam kasus ini:
  • Worktree masih menyimpan pekerjaan: file yang diubah atau tidak dilacak, atau commit yang belum didorong.
  • Submodul yang diperiksa dalam worktree menyimpan file yang diubah atau tidak dilacak, atau Claude Code tidak dapat memeriksa submodul worktree. Pemeriksaan ini memerlukan Claude Code v2.1.274 atau lebih baru.
  • Salah satu dari empat kasus yang juga memblokir pembuatan worktree berlaku: Claude Code tidak dapat menentukan driver filter mana yang didefinisikan konfigurasi repositori, atau menemukan pengaturan di sana yang tidak dapat dimatikan.
  • Worktree milik sesi --worktree yang belum Anda kirim ke latar belakang, apa pun usianya.
  • Anda membuat worktree sendiri dengan git worktree add, bahkan jika Anda kemudian menjalankan sesi --worktree <name> di dalamnya dan mengirimnya ke latar belakang.
Claude Code menulis penanda ke metadata git setiap worktree yang dibuat dengan git, dan sapuan menyimpan worktree apa pun tanpa satu, termasuk worktree yang dibuat hook WorktreeCreate.

Kunci worktree dan penghapusan manual

Saat agen berjalan, Claude Code menyimpan git worktree lock pada worktree-nya sehingga pembersihan bersamaan tidak dapat menghapusnya, dan melepaskan kunci saat agen selesai. Claude Code menyimpan kunci yang sama pada worktree yang dibuat untuk sesi yang dikirim ke latar belakang saat sesi berjalan, jadi sapuan meninggalkan worktree di tempat dan git worktree remove menolak untuk menghapusnya. Sapuan juga melepaskan kunci yang Claude Code atur untuk sesi yang prosesnya telah keluar, jadi sesi latar belakang yang terbunuh tidak meninggalkan worktree-nya terkunci secara permanen. Sapuan tidak pernah melepaskan kunci yang Anda atur sendiri dengan git worktree lock. Untuk membersihkan worktree yang disimpan sapuan, jalankan git worktree remove, tambahkan --force jika worktree memiliki perubahan yang belum dikomit atau file yang tidak dilacak. Jika git menolak karena worktree terkunci, jalankan git worktree unlock padanya terlebih dahulu.

Menyesuaikan pembuatan worktree

Default Claude Code untuk membuat worktree sudah mencakup sebagian besar sesi: Claude Code membuatnya di bawah .claude/worktrees/, membuat branch-nya dari branch default repositori Anda, dan hanya melakukan checkout file yang dilacak. Opsi di bagian ini mengubah default tersebut.

Memilih branch dasar

Worktree baru dibuat dari branch default repositori, sehingga sebagian besar sesi tidak memerlukan pengaturan ini. Atur worktree.baseRef di pengaturan untuk membuat branch dari pekerjaan Anda saat ini. Pengaturan ini menerima dua nilai:
  • "fresh" (default): membuat branch dari branch default repositori di remote, biasanya main, sehingga worktree dimulai dari tree yang bersih dan sesuai dengan remote.
  • "head": membuat branch dari HEAD lokal Anda saat ini, sehingga worktree membawa commit Anda yang belum di-push dan status feature branch Anda. Gunakan ini saat mengisolasi subagent yang perlu bekerja pada pekerjaan yang sedang berlangsung. Di dalam worktree, "head" di-resolve ke HEAD milik worktree tersebut, bukan milik checkout utama.
Anda tidak dapat mengatur worktree.baseRef ke nama branch. Untuk memulai worktree dari branch tertentu yang sudah ada, buat worktree tersebut langsung dengan git. Untuk basis "fresh", Claude Code menjaga origin/HEAD tetap terbaru:
  • Jika repositori belum di-fetch dalam 24 jam terakhir, Claude Code melakukan fetch branch default, dibatasi lima detik, dan menggunakan ref yang di-cache secara lokal jika fetch gagal.
  • Fetch tidak pernah menunggu input di terminal Anda. Fetch juga dianggap gagal jika git atau ssh akan meminta kata sandi, passphrase kunci, atau konfirmasi host SSH baru.
  • Jika tidak ada remote yang dikonfigurasi, atau origin/HEAD tidak di-cache secara lokal dan tidak dapat di-fetch, worktree akan kembali menggunakan HEAD lokal Anda saat ini.
Contoh ini membuat setiap worktree baru dibuat dari branch pekerjaan Anda saat ini:

Membuat branch dari pull request

Untuk membuat branch dari pull request atau merge request tertentu, berikan kepada --worktree nomornya dengan awalan #, URL pull request GitHub, atau URL merge request GitLab seperti https://gitlab.com/group/repo/-/merge_requests/123. Claude Code melakukan fetch commit head dari perubahan tersebut dari origin dan membuat worktree di .claude/worktrees/pr-<number>. Beri tanda kutip pada argumen agar shell Anda tidak memperlakukan # sebagai awal komentar:
Claude Code hanya membaca nomor dari URL. Claude Code selalu melakukan fetch dari remote origin repositori Anda, dan memilih jalur fetch berdasarkan host origin:
  • github.com: melakukan fetch pull/<number>/head
  • gitlab.com: melakukan fetch merge-requests/<number>/head
  • GitHub Enterprise, GitLab yang dikelola sendiri, atau host lainnya: mencoba pull/<number>/head terlebih dahulu, lalu merge-requests/<number>/head
Fetch ini tidak pernah menunggu input di terminal Anda. Jika git atau ssh akan meminta kata sandi, passphrase kunci, atau konfirmasi host SSH baru, fetch akan gagal dan Claude Code keluar dengan pesan Error creating worktree: Failed to fetch PR/MR #<number>. Kunci yang disimpan oleh ssh-agent tetap berfungsi, jadi muat kunci Anda di sana dan jalankan git fetch sekali secara manual untuk mencatat host baru sebelum Anda memulai. Sebelum v2.1.233, Claude Code hanya menerima #<number> dan URL pull request bergaya GitHub untuk --worktree, dan selalu melakukan fetch pull/<number>/head.

Menyalin file yang di-gitignore ke worktree

Worktree adalah checkout baru, sehingga file yang tidak dilacak seperti .env atau .env.local dari repositori utama Anda tidak ada di dalamnya. Untuk menyalinnya secara otomatis saat Claude membuat worktree, tambahkan file .worktreeinclude ke root proyek Anda. File ini menggunakan sintaks .gitignore. Hanya file yang cocok dengan pola dan juga di-gitignore yang disalin, sehingga file yang dilacak tidak pernah diduplikasi. Jika Anda menulis pola yang diawali dengan **/ dan file yang Anda inginkan berada di dalam direktori yang di-gitignore secara keseluruhan, Claude Code hanya menyalinnya jika direktori itu sendiri cocok dengan pola, atau jika nama pertama setelah **/ adalah salah satu nama di jalur direktori tersebut. Misalnya, jika Anda menulis **/.claude/skills/*.md, nama pertamanya adalah .claude, sehingga Claude Code menyalin file yang cocok dari direktori .claude/ yang diabaikan. Untuk menyalin file dari direktori yang diabaikan yang tidak dijangkau oleh pola **/, sebutkan nama direktori tersebut dalam pola: tulis vendor/**/config.json alih-alih **/config.json. Sebelum v2.1.239, Claude Code menyalin file dari direktori yang diabaikan secara keseluruhan untuk pola **/ hanya jika direktori itu sendiri cocok dengan pola. .worktreeinclude ini menyalin dua file env dan sebuah konfigurasi rahasia ke setiap worktree baru:
.worktreeinclude
Ini berlaku untuk setiap worktree yang dibuat Claude Code dengan git: worktree --worktree, worktree subagent, dan sesi paralel di aplikasi desktop. Dengan hook WorktreeCreate, salin file-file tersebut di dalam skrip hook.

Menggunakan kembali nama worktree

Jika worktree dengan nama yang Anda berikan ke --worktree sudah ada, Claude Code membukanya alih-alih membuat yang baru. Jika Claude Code berhenti dengan error yang berisi belongs to a different repository atau is a leftover worktree, lihat Direktori worktree belongs to a different repository. Dengan basis default "fresh", worktree yang dibuka kembali akan di-reset ke branch default repositori alih-alih melanjutkan dari ujung lamanya jika semua kondisi berikut terpenuhi:
  • Worktree tidak memiliki perubahan yang belum di-commit atau file yang tidak dilacak.
  • Worktree masih berada di branch yang dibuat Claude Code untuknya.
  • Worktree tidak memiliki commit sendiri, atau pull request atau merge request-nya sudah di-merge dan branch remote-nya sudah dihapus.
Claude Code mendeteksi kasus yang sudah di-merge hanya dari status git: branch remote tempat worktree melakukan push sudah tidak ada, dan setiap commit di worktree sudah ada di branch default. Dalam semua kasus lainnya, Claude Code membuka kembali worktree pada ujung lamanya:
  • Worktree tidak memenuhi salah satu kondisi tersebut.
  • Claude Code tidak dapat memverifikasi status worktree.
  • worktree.baseRef bernilai "head".
  • Nama tersebut merupakan referensi pull request atau merge request.

Mengganti pembuatan worktree dengan hook

Konfigurasikan hook WorktreeCreate untuk sepenuhnya mengganti logika git worktree default, termasuk menempatkan worktree di lokasi selain .claude/worktrees/. Untuk contoh lengkap, lihat Kontrol versi non-git.

Apa yang dibagikan worktrees dengan checkout utama

Worktree mendapatkan file dan cabang sendiri, tetapi berbagi hal-hal berikut dengan checkout utama:
  • Direktori .git repositori: perintah git dalam worktree menulis ke direktori .git bersama milik repositori utama. Dengan sandbox diaktifkan, perintah seperti git commit bekerja dalam sesi di root worktree, yaitu tempat --worktree memulai sesi. Secara default, perintah tersebut gagal dengan error index.lock jika Anda menjalankan claude di subdirektori worktree.
  • Plugins: plugin yang diinstal pada cakupan proyek dari checkout utama juga dimuat dalam worktrees dari repositori yang sama, jadi Anda tidak perlu menginstal ulang per worktree.
  • Persetujuan izin: memilih “Yes, and don’t ask again” untuk perintah Bash dalam sesi worktree menyimpan aturan ke .claude/settings.local.json checkout utama. Aturan tersebut berlaku dalam checkout utama dan di setiap worktree lain dari repositori, dan tetap bertahan setelah worktree dihapus. Di Windows dan dalam kasus lain di mana Claude Code tidak menggunakan root repositori, aturan tetap dengan worktree itu. Lihat di mana persetujuan disimpan.
  • Skills, agents, dan commands yang tidak dilacak: ketika checkout worktree tidak memiliki direktori .claude/skills di akarnya, misalnya karena .claude/skills Anda diabaikan oleh git, Claude Code memuat project skills checkout utama dalam sesi worktree. Dalam worktree dengan direktori .claude/skills sendiri, hanya salinan itu yang dimuat. Pembacaan yang sama mencakup .claude/agents dan .claude/commands. Untuk skills, pembacaan memerlukan Claude Code v2.1.277 atau lebih baru.
Semua ini berlaku baik Anda membuat worktree dengan --worktree maupun dengan git worktree add. Dalam sesi worktree yang Anda mulai dari aplikasi desktop, Claude Code membaca konfigurasi proyek seperti pengaturan, hook, skill, agent, perintah, dan server .mcp.json dari root checkout utama. Perintah hook dijalankan di root tersebut, dan ${CLAUDE_PROJECT_DIR} menunjuk ke sana. Untuk menjangkau file yang sedang dikerjakan Claude, baca path worktree dari kolom input cwd milik hook. File CLAUDE.md dan .claude/rules/ tetap dimuat dari worktree.

Kelola worktrees secara manual

Buat worktrees dengan Git secara langsung saat Anda perlu checkout cabang yang ada tertentu atau menempatkan worktree di luar repositori. Buat worktree pada cabang baru:
Buat worktree dari cabang yang ada, ganti fix-issue-456 dengan cabang yang sudah ada dalam repositori Anda:
Mulai Claude dalam worktree:
Daftar worktrees Anda:
Hapus satu saat Anda selesai dengannya:
Lihat dokumentasi Git worktree untuk referensi perintah lengkap.

Non-git version control

Isolasi worktree menggunakan git secara default. Untuk SVN, Perforce, Mercurial, atau sistem lainnya, konfigurasikan hook WorktreeCreate dan WorktreeRemove untuk menyediakan logika pembuatan dan pembersihan kustom. Karena hook menggantikan perilaku git default, .worktreeinclude tidak diproses saat Anda menggunakan --worktree. Salin file konfigurasi lokal apa pun di dalam skrip hook Anda. Hook WorktreeCreate ini membaca nama worktree dari JSON pada stdin dengan jq, checkout salinan kerja SVN segar, dan mencetak jalur direktori sehingga Claude Code dapat menggunakannya sebagai direktori kerja sesi. Tambahkan konfigurasi ke settings.json Anda:
Pasangkan dengan hook WorktreeRemove untuk membersihkan saat sesi berakhir. Lihat referensi hooks untuk skema input dan contoh penghapusan. Hook WorktreeCreate juga memungkinkan Anda menjalankan /batch di luar repositori git. Setiap subagent /batch kemudian menerbitkan perubahannya dengan perintah kontrol versi proyek Anda dan, ketika tidak dapat membuka pull request, melaporkan apa yang diterbitkannya. Menjalankan /batch di luar repositori git memerlukan Claude Code v2.1.281 atau lebih baru.

Pemecahan masalah

Claude Code melaporkan error di bawah ini saat membuat worktree, masuk ke worktree saat startup, atau mengembalikan sesi yang dilanjutkan ke worktree.

Claude Code tidak dapat masuk ke worktree saat startup

Ketika Claude Code tidak dapat masuk ke direktori worktree saat startup, Claude Code mencetak error yang menyebutkan path tersebut dan keluar dengan kode 1. Hal ini dapat terjadi ketika hook WorktreeCreate mencetak sesuatu selain direktori yang dibuatnya, atau ketika direktori tersebut dihapus setelah disiapkan.

Pembuatan worktree gagal pada path symlink

Claude Code menolak membuat worktree ketika .claude, .claude/worktrees, atau direktori worktree itu sendiri adalah symlink, dan error tersebut menyebutkan path symlink tersebut. Hapus symlink tersebut dan coba ulang. Sebelum v2.1.212, jika repositori sudah berisi symlink yang di-commit pada salah satu path tersebut, pembuatan worktree mengikutinya dan dapat membuat file di luar repositori.

Worktree yang dibuat Claude Code berisi konten asli dari objek yang diganti

Jika repositori Anda menggunakan git replace, file di dalam worktree yang dibuat Claude Code berisi konten objek asli, bukan pengganti yang disebutkan oleh entri refs/replace/ Anda. Claude Code menjalankan perintah git yang melakukan checkout file worktree dengan GIT_NO_REPLACE_OBJECTS=1, mengabaikan nilai apa pun yang Anda ekspor untuk variabel tersebut. Untuk mendapatkan konten pengganti, buat worktree sendiri dengan git worktree add dan jalankan Claude Code di dalamnya.

File Git LFS berupa file pointer di worktree yang dibuat Claude Code

Jika Anda menyiapkan Git LFS dengan git lfs install --local, worktree yang dibuat Claude Code berisi file pointer LFS, bukan file yang sebenarnya. Flag --local menulis filter LFS ke dalam .git/config milik repositori itu sendiri, bukan ke konfigurasi git global Anda. Perintah git lfs install biasa menulis ke konfigurasi global Anda dan tidak terpengaruh. Hal yang sama berlaku untuk filter driver lain yang didefinisikan dalam konfigurasi milik repositori itu sendiri. Claude Code melewati filter driver milik repositori itu sendiri saat membuat worktree karena filter driver adalah perintah shell, dan apa pun yang dapat menulis ke repositori, termasuk Claude, bisa saja menaruhnya di sana. Sebelum v2.1.247, Claude Code menjalankan driver tersebut selama pembuatan worktree. Untuk mendapatkan file yang sebenarnya, jalankan git lfs pull di dalam worktree. Dalam empat kasus yang jarang terjadi, Claude Code sama sekali tidak membuat worktree: Claude Code tidak dapat menentukan filter driver mana yang didefinisikan oleh konfigurasi repositori, atau Claude Code menemukan pengaturan di sana yang tidak dapat dinonaktifkannya. Cocokkan error dengan perbaikannya:
  • Could not read the repository git config to neutralize filter drivers: Claude Code tidak dapat membaca .git/config milik repositori, misalnya karena permission-nya. Perbaiki hal tersebut dan coba ulang.
  • The repository git config defines a filter driver whose name cannot be neutralized (contains "=" or a newline): ganti nama atau hapus filter driver tersebut di .git/config dan coba ulang.
  • The repository git config has a conditional include (includeIf): pindahkan pengaturan yang dimuat oleh includeIf di .git/config langsung ke dalam file tersebut, hapus includeIf, dan coba ulang. includeIf di konfigurasi git global Anda tidak memicu hal ini.
  • Git was not run: the repository's own git config sets <key>: pesan tersebut menyebutkan key yang mengarahkan Git LFS ke program yang akan dijalankan, seperti lfs.customtransfer.<name>.path atau lfs.standalonetransferagent. Jika pengaturan tersebut milik Anda, pindahkan ke konfigurasi git global Anda. Jika Anda tidak mengenalinya, hapus dari konfigurasi git repositori, karena tool atau checkout yang tidak Anda percayai mungkin telah menulisnya. Coba ulang setelah key tersebut hilang dari konfigurasi repositori.

Pembuatan worktree gagal pada partial clone

Error yang berisi This repository is a partial clone berarti Claude Code tidak dapat mengambil setiap objek git yang dibutuhkan commit awal worktree. Lakukan langkah dalam kalimat pesan yang diakhiri dengan try again. Kemudian coba ulang dari shell tempat Anda melakukannya: jalankan claude --worktree, atau jalankan claude di sana dan minta lagi.

Can only use --worktree in a git repository

Error ini berarti Anda memberikan --worktree di direktori yang bukan checkout git, dan tidak ada hook WorktreeCreate yang aktif.
  • Di folder tanpa version control, jalankan git init di sana, buat commit pertama, lalu coba ulang.
  • Di checkout dari sistem version control lain, siapkan hook yang disarankan pesan tersebut.
  • Untuk bekerja langsung di direktori tersebut, jalankan Claude tanpa --worktree.

Direktori worktree belongs to a different repository

Error belongs to a different repository dan is a leftover worktree keduanya berarti git mengaitkan direktori untuk nama worktree yang Anda berikan dengan lokasi lain. Hal ini dapat terjadi setelah Anda menyalin atau memindahkan proyek. Berikan nama worktree yang berbeda. Jika direktori tersebut tidak berisi pekerjaan yang perlu disimpan dan Anda tidak menyalin atau memindahkan proyek, Anda dapat menghapusnya dan mencoba ulang dengan nama yang sama. Setelah menyalin atau memindahkan proyek, percobaan ulang tersebut dapat gagal dengan is already checked out elsewhere in this repository, jadi gunakan nama yang berbeda.

Claude Code menolak menggunakan worktree

Error yang diawali dengan Refusing to use <path> as an isolation worktree berarti Claude Code memeriksa identitas git direktori tersebut sebelum mengadopsinya sebagai checkout terisolasi untuk sesi atau subagent, lalu menolaknya. Pemeriksaan ini berjalan baik saat Claude Code membuat worktree, masuk ke worktree yang sudah ada, maupun menggunakan kembali worktree dari eksekusi sebelumnya. Dalam sebagian besar kasus, sisa pesan menyatakan bahwa metadata git direktori tersebut di-resolve ke checkout utama: misalnya, file .git-nya menunjuk ke direktori .git milik repositori utama, atau git me-resolve working tree-nya ke checkout utama melalui pengalihan core.worktree. Dari direktori seperti itu, perintah git biasa seperti git reset --hard akan bekerja pada checkout utama, bukan pada worktree. Claude Code juga menolak ketika direktori memiliki entri .git yang tidak dapat dibacanya, alih-alih berasumsi bahwa worktree tersebut aman. Direktori yang sama sekali tidak memiliki metadata git, seperti direktori yang dibuat oleh hook WorktreeCreate Anda, lolos pemeriksaan hanya jika tidak ada repositori git yang memuatnya. Jika hook membuat direktori di dalam repositori, git me-resolve direktori tersebut ke checkout repositori itu dan Claude Code menolaknya dengan pesan git resolves its working tree to, jadi buat hook membuat direktorinya di luar repositori mana pun. Claude Code membiarkan direktori yang ditolak tetap di tempatnya, karena mungkin berisi pekerjaan. Cocokkan pesan dengan pemulihannya, baik pesan tersebut muncul setelah Refusing to use <path> maupun dalam pesan resume; beberapa akhiran hanya muncul dalam pesan resume:
  • Menyebutkan launch from the parent checkout atau Run the resume from the project checkout: Anda menjalankan Claude Code dari dalam worktree. Jalankan dari checkout utama sebagai gantinya; worktree tidak perlu dibuat ulang.
  • Menyebutkan it cannot be resumed or re-entered: tidak ada apa pun dalam sesi ini yang menjamin worktree dari lokasi tempat Anda menjalankannya. Buat ulang worktree tersebut; direktori dan pekerjaannya tetap ada di disk untuk pemulihan manual, dan ketika worktree memiliki checkout induk, melanjutkan dari sana juga berhasil.
  • Menyebutkan it contains the protected checkout: direktori yang ditolak adalah induk dari checkout utama Anda, seperti direktori home Anda. Jangan menghapusnya. Ubah path worktree, seperti path yang dikembalikan hook WorktreeCreate Anda atau target EnterWorktree, sehingga worktree tidak memuat checkout tersebut.
  • Menyebutkan the protected checkout <path> has a .git entry that could not be examined atau has git metadata that could not be resolved: masalahnya ada pada metadata git checkout utama, bukan milik worktree. Jangan menghapus worktree, dan abaikan saran di akhir pesan untuk membuatnya ulang, yang tidak berlaku untuk kedua akhiran ini. Perbaiki checkout utama, misalnya masalah permission atau penolakan git dubious ownership pada .git-nya, lalu coba ulang. Sebelum v2.1.302, dengan git 2.56 atau lebih baru, akhiran could not be resolved juga muncul ketika <path> setelah the protected checkout berisi file .git yang tersesat. Tersesat di sini berarti path pada baris gitdir: file tersebut tidak mengarah ke repositori git yang valid. Untuk memulihkan, perbarui Claude Code dan coba ulang. Ketika path gitdir: tersebut sudah tidak ada, Anda juga dapat menghapus file .git tersebut dan mencoba ulang.
  • Menyebutkan its recorded path has a network spelling: Claude Code tidak pernah melanjutkan ke worktree pada path jaringan. Buat ulang worktree di path lokal.
  • Akhiran lainnya: pesan tersebut menyebutkan masalah dan perbaikannya, seperti menghapus pengalihan core.worktree atau membuat ulang worktree; ikuti petunjuk tersebut. Sebelum menghapus direktori yang pesannya menyatakan identitas git-nya tidak dapat diverifikasi, atasi terlebih dahulu penyebab yang disebutkan, misalnya symlink di path worktree atau git sendiri yang gagal berjalan, karena direktori tersebut mungkin dalam kondisi baik. Ketika Anda membuat ulang, selamatkan terlebih dahulu perubahan apa pun yang Anda perlukan dari direktori lama; direktori tersebut tetap ada di disk.

Sesi dilanjutkan di luar worktree-nya

Ketika Anda melanjutkan sesi secara interaktif dan Claude Code tidak dapat mengembalikannya ke worktree-nya, Claude Code memberi tahu hal tersebut dengan salah satu pesan di bawah ini. Ketika Claude Code menghapus pengikatan worktree, Claude Code mencatat penghapusan tersebut dalam transkrip sesi. Jika Anda menonaktifkan penulisan transkrip, pesan tersebut sebaliknya menyatakan bahwa pengikatan tidak dapat dihapus dan bahwa Claude Code akan memeriksa ulang worktree pada resume berikutnya. Dalam mode non-interaktif dengan -p, dan pada resume yang dijalankan oleh Agent SDK, Claude Code menghentikan resume dengan error stderr untuk setiap penolakan kecuali worktree yang sudah hilang, alih-alih melanjutkan tanpa isolasi. Dengan --output-format stream-json, penolakan tersebut juga dikirim ke stdout sebagai pesan result dengan subtipe error_during_execution yang array errors-nya berisi teks yang sama, sehingga aplikasi Agent SDK menerima alasannya, bukan hanya exit non-zero. Sebelum v2.1.260, penolakan resume worktree tidak menghasilkan pesan result. Pesan-pesan tersebut memiliki bentuk yang berbeda dari pesan interaktif dalam tabel:
  • Error: cannot resume into worktree <path>: ...This session was not started. untuk penolakan yang ditampilkan tabel sebagai Did not re-enter. Claude Code menghapus pengikatan worktree sebelum keluar, dan error tersebut menyatakannya; saat berikutnya Anda melanjutkan percakapan, sesi berlanjut di direktori saat ini tanpa isolasi worktree. Sebelum v2.1.260, Claude Code tidak menulis pengikatan yang telah dihapus, sehingga setiap percobaan ulang resume yang sama gagal dengan error yang sama. Jika Anda menonaktifkan penulisan transkrip, penghapusan tersebut tidak dapat disimpan. Error tersebut kemudian menyatakan bahwa perintah yang sama akan ditolak lagi, dan menyebutkan --fork-session serta memulai percakapan baru sebagai cara untuk melanjutkan tanpa worktree.
  • Error: could not verify worktree <path> for this resume, so the resume was aborted... untuk Could not verify
  • Error: ...The worktree binding is kept. untuk Could not re-enter
  • Notice: the worktree <path> for this session no longer exists... untuk worktree yang sudah hilang; Claude Code mencetaknya dan melanjutkan sesi, seperti halnya resume interaktif
Akhiran penolakan yang disematkan dalam setiap error sama dengan yang ada pada pemberitahuan interaktif, sehingga tetap cocok dengan entrinya di bagian Claude Code menolak menggunakan worktree. Dalam hasil stream-json, startup_failure_reason bernilai worktree_unverified untuk error could not verify worktree dan worktree_resume_refused untuk error cannot resume into worktree dan The worktree binding is kept. Aplikasi dapat membuat percabangan berdasarkan nilai tersebut alih-alih mencocokkan teks error. Sebelum v2.1.274, hasil tersebut tidak memuat field startup_failure_reason.

Lihat juga

Worktrees menangani isolasi file. Halaman terkait di bawah mencakup pendelegasian pekerjaan ke checkout terisolasi itu, melewatkan temuan di antara mereka, dan beralih antar sesi yang Anda buat: