Claude Code ile bir yerel ayar rehberi hazırlıyorsunuz: listedeki arama üzerinde çalışıyorsunuz, iş henüz yarıda. Derken sayfanın kaydedilmiş sürümünde başlığın altındaki açıklamanın yanlış olduğunu fark ediyorsunuz. Düzeltmesi iki dakika sürer, ama onu bitmemiş aramayla iç içe değil, ayrı kontrol etmek istiyorsunuz.
Aynı depoda ikinci göreve kendine ait bir çalışma klasörü vermeyi, orada ayrı bir Claude Code oturumu açmayı ve sonunda hiçbir şeyi karıştırmadan sonucu kaydetmeyi ele alalım. İkinci klasör tek başına işleri hızlandırmaz. Tek bir işe yarar: iki görevin aynı dosya kümesinde birbirine karışmasını önler.
Tek bir çalışma klasörü yetmediğinde
Eğitim projesi locale-guide, yerel ayarların listelendiği bir tarayıcı sayfası. Şu anda klasörde A görevi üzerinde çalışılıyor: arama, feature/search dalı ve tamamlanmamış bir değişiklik:
git status --short
M app.jsBu değişikliği kaybetmemek gerekir, ama henüz tamamlanmış bir sonuç da değil. Tam bu sırada aramayla ilgisi olmayan B görevi çıkıyor: main dalında kayıtlı sayfa sürümündeki index.html başlığının altındaki açıklamayı düzeltmek.
İlk akla gelen, ikinci bir terminal açıp aynı klasörde bir claude daha başlatmak. Konuşmalar ayrı olur ama dosyalar aynı kalır. İki ajan aynı bölümleri değiştirmeye başlarsa düzenlemeler birbirine karışabilir. Basit örneğimizde açıklama ve arama şimdilik farklı dosyalarda, ama iki oturum da aynı yarım kalmış projeyi görür. Dal değiştirmek de mevcut değişiklikleri ele almayı gerektirir.
Çözüm, B görevine kendi çalışma alanını vermek. Git bunun için aynı depoda ayrı bir çalışma klasörü, yani worktree sunar. Claude Code'da ise böyle bir klasörü hazırlayıp oturumu doğrudan orada başlatan --worktree bayrağı var. Önce mekanizmaya, sonra bayrağa bakalım.

Önce bir not: her görev için böyle çalışmanız şart değil. Çalışma ağacı temiz ve düzeltme kısaysa ikinci klasör yalnızca fazladan uğraş çıkarır. Görevleri tek klasörde sırayla yürütmek de gayet normal.
Dal, çalışma klasörü ve oturum
Üç şeyi sık sık aynı anda kullandığınız için birbirine karıştırmak kolay:
| Nedir? | Ne tutar? | Nerede bulunur? |
|---|---|---|
| dal | bir commit'e ve geçmiş çizgisine işaret eder | depoda, tüm çalışma klasörleriyle ortak |
| çalışma klasörü (worktree) | şu anda üzerinde çalıştığınız dosyalar ve commit için hazırlananlar | diskte, her klasörün kendine ait |
| oturum | ajanla konuşma ve bağlamı | Claude Code'da |
İkinci terminal sorusunun yanıtı da burada: yeni oturum konuşmayı ayırır, dosyaları değil. Dosyaların da ayrılması için ikinci bir çalışma klasörü gerekir.
Geçmiş ve dallar ortak, çünkü iki klasör de aynı depoya bağlı. Git ayarları da varsayılan olarak ortak, ancak Git worktree başına ayrı ayarları destekliyor. Çalışma dosyaları ve commit için hazırlanan değişikliklerse her klasöre özel. İlk klasördeki commit edilmemiş arama, kendiliğinden ikinci klasörde görünmez.
Aynı dalı genellikle iki klasörde aynı anda açamazsınız. Git işlemi reddeder ve dalı zaten kullanan klasörü belirtir:
fatal: 'fix/label' is already used by worktree at '/projects/locale-guide-label'Başlangıç durumunu seçin
Eğitim örneğinde depo önceden oluşturulmuş; en az bir commit, yerel main dalı ve feature/search dalı var. İkisi de şimdilik aynı commit'i gösteriyor, arama ise yalnızca commit edilmemiş bir değişiklik. Ana klasördeki başlangıç durumuna üç komutla bakalım:
git status --short # şu anda kaydedilmemiş olanlar
git branch --show-current # ana klasörün bulunduğu dal
git log -1 --oneline main # main dalındaki son commit M app.js
feature/search
d5ec405 add locale guide pageAçıklamayı bağımsız olarak düzeltmek için main dalını seçiyoruz: B görevinin aramanın mevcut durumuna değil, sayfanın kaydedilmiş sürümüne ihtiyacı var. Dikkat edin: bu, bilgisayarınızdaki yerel main. Uzak depodaki aynı adlı dalla eşleşmesi gerekmez ve komut ağdan hiçbir şey indirmez.
İkinci görev ilk görevin sonucuna ihtiyaç duyuyorsa önce hangi kaydedilmiş commit'in gerektiğine karar verin ve klasörü o commit'ten oluşturun. Normal git worktree add commit edilmemiş değişiklikleri otomatik olarak aktarmaz. Dosyaları ayrıca kopyalamak veya ortamı hazırlamak için ek araçlar kullanmak başka işlemlerdir.
İkinci çalışma klasörünü oluşturun
locale-guide klasöründen:
git worktree add -b fix/label ../locale-guide-label mainKomut soldan sağa şöyle okunur: yeni fix/label dalı oluşturulur, çalışma klasörü hemen yanına, ../locale-guide-label yoluna yerleştirilir ve başlangıç noktası olarak main dalı alınır. Son argüman temel noktayı açıkça seçer. Olmasaydı Git bu komutta feature/search dalının geçerli HEAD commit'ini kullanırdı, commit edilmemiş değişiklikleri değil. Örneğimizde dallar hâlâ aynı commit'te olduğu için dosyalar aynı olurdu; arama işi commit edildikten sonra başlangıç noktası sonucu etkiler. Git yaklaşık şöyle yanıt verir:
Preparing worktree (new branch 'fix/label')
HEAD is now at d5ec405 add locale guide pageŞimdi ne olduğunu kontrol edelim. -C bayrağı Git'e klasöre geçmeden komutu belirtilen klasörde çalıştırmasını söyler:
git worktree list
git -C ../locale-guide-label branch --show-current
git -C ../locale-guide-label status --shortÖrnek çıktı; yollar varsayımsal, sizinkiler farklı olacaktır:
/projects/locale-guide d5ec405 [feature/search]
/projects/locale-guide-label d5ec405 [fix/label]
fix/labelListe iki klasörü ve her birinin dalını gösteriyor. Ana klasör tamamlanmamış aramayla feature/search dalında kaldı, yeni klasör ise fix/label dalında. İkinci klasördeki status hiçbir şey yazdırmadı; klasör temiz, istediğimiz de buydu.
Yol veya dal adı kullanılamıyorsa Git işlemi reddeder ve nedenini açıklar, örneğin already exists ya da is already used by worktree. Worktree listesini, dalları ve belirtilen klasörün içeriğini kontrol edin. Bu, önceki çalıştırmanızdan kalmış veya başka bir göreve ait olabilir. Körü körüne --force eklemeyin; önce neyin var olduğunu ve gerekli olup olmadığını öğrenin.
İkinci görevi Claude Code'da açın
locale-guide-label klasörünü ayrı bir IDE penceresinde açın ya da yeni bir terminalde bu klasöre geçip claude komutunu oradan çalıştırın. Yeni oturum A görevini bilmez, bunda bir sorun yok; yalnızca kendi bağlamına ihtiyacı var:
Beklenen klasör: locale-guide-label, dal: fix/label.
Önce gerçek klasörü ve dalı kontrol et. Farklıysa dur.
index.html dosyasını oku.
Başlığın altındaki açıklamayı "Yerel ayar listesi: kod, dil ve ülke" olarak değiştir.
Dosyada başka hiçbir şeyi değiştirme ve yaptığın değişikliği göster.Dosyalara dokunmadan önce Claude Code'dan çalışma klasörünü ve geçerli dalı söylemesini isteyin, sonra yanıtı planınızla karşılaştırın. Yanlış klasörde başlatılan ajan da doğru klasördeki kadar kendinden emin çalışır.
Düzenlemeden sonra iki terminalin her birinde git status ve git diff ile kontrol yapın: ikinci klasörde yalnızca index.html içindeki açıklama değişmiş, ilk klasördeyse önceki app.js değişikliği kalmış olmalı. Tek başına status dosya adlarını gösterir, içeriklerinin korunduğunu kanıtlamaz. Tam karşılaştırma için kontrol sırasında arama çalışmasını duraklatın. Ana klasörü kendi terminalinden kontrol edin; yalıtılmış oturumdaki ajana oraya geçmesini söylemeyin. Sayfayı mutlaka ikinci klasörden açın, yoksa eski açıklamayı görürsünüz.
Kısa bir yol da var. claude --worktree label-fix komutu çalışma klasörünü kendisi oluşturup oturumu orada başlatır. Güncel belgelere göre klasör deponun içinde .claude/worktrees/label-fix/ yolunda oluşur, dalın adı worktree-label-fix olur ve temel olarak geçerli commit'iniz değil, uzak depodaki varsayılan dal (genellikle main) kullanılır. Uzak depo ayarlanmamışsa temel, geçerli yerel commit olur. Yani yukarıdaki komutta açıkça belirttiğimiz main ile aynı şey değil, ancak basit bir projede sonuç çoğu zaman aynıdır. Varsayılanı ayarlardan değiştirebilirsiniz; ayrıntılar için kendi sürümünüzün belgelerine bakın.
Temel dal uygunsa ve görev için hızla ayrı bir alan açmanız gerekiyorsa bu bayrak kullanışlıdır. Önceden oluşturduğunuz klasörün içinde çalıştırmayın; yeni bir klasör daha oluşturur. Ayrıca yeni klasörlerin içeriği ana klasörde izlenmeyen dosyalar olarak görünmesin diye .claude/worktrees/ yolunu .gitignore dosyasına ekleyin.
Neler ortak kalır?
Ayrı klasör, ilk bakışta sanıldığından daha az şeyi ayırır:
| Ayrı | Ortak | Hiç ayrılmayan |
|---|---|---|
| çalışma dosyaları, commit hazırlığı, klasörün geçerli dalı | geçmiş, tüm dallar, depo ayarları, uzak depo adresi | yerel sunucu portları, harici veritabanı, bulut hizmetleri, işlemin diskin geri kalanına erişimi |
Üçüncü sütun, burada en sık unutulan nokta. Worktree, makineyi yalıtmakla değil Git dosyalarıyla ilgilidir. Aynı portu kullanan iki yerel sunucu çalışamaz; ayarlarda aynı harici veritabanı belirtilmişse iki klasörün istekleri de oraya gider. Claude Code'un ayrı klasörde çalışırken yaptığı kontroller de klasörü tüm sistem için bir sandbox'a dönüştürmez.
İkinci klasör seçilen commit'in dosyalarını alır. Bağımlılıklar ve yerel yapılandırma Git'te tutulmuyorsa ortamı genellikle ayrıca hazırlamak gerekir; ek araçlar bu işi otomatikleştirebilir. .env dosyasını düşünmeden kopyalamayın: aynı erişim bilgileri iki çalıştırmayı da tek hizmete yönlendirebilir. Bizim statik rehberimizde sunucuya ya da gizli bilgilere gerek yok; sayfa dosyadan açılıyor.
Sonucu kaydedip aktarın
B klasöründe açıklamayı tarayıcıda kontrol edin, git diff çıktısına bakın ve yalnızca gerekli dosyayı commit edin:
git add index.html
git diff --cached
git commit -m "fix: correct locale list label"Commit etmeden önce yalnızca gerekli değişikliğin hazırlandığından emin olun. git diff --cached başka değişiklikler gösteriyorsa önce onları inceleyin.
Commit ortak depoya girdi ve artık ana klasörden de görünüyor. Ama kendi başına ne main dalına ne de feature/search dalına eklenmiş oldu: kendi dalında duruyor ve birleştirmeye karar vermenizi bekliyor.
Sonucu yalnızca A görevi tamamlandığında ya da en azından kaydedildiğinde ve ana klasör temiz olduğunda aktarın. Arama işi sürerken main dalına geçmeyin; önce aramayla ilgili durumu çözün. Ana klasör temizse:
git checkout main
git merge fix/labelFast-forward
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)Bu çıktı, fix/label oluşturulduktan sonra main'in değişmediği duruma karşılık gelir. Git bir çakışma bildirirse durup birleştirme kurallarına göre çözün; bu ayrı bir konu ve "Git'te branch'ler ve birleştirme" makalesinde ele alınıyor. Birleştirmeden sonra sayfayı yeniden açın: açıklama değişmiş, yerel ayar listesi aynı kalmış olmalı. feature/search dalı bundan etkilenmedi. Aramaya devam etmeden önce main'deki düzeltmeyi bu dala aktarıp aktarmayacağınıza ayrıca karar verin.
Gereksiz klasörü kaldırın
Önce ikinci klasördeki oturumu ve orada başlattığınız diğer her şeyi kapatın. Ardından klasörde gerekli bir şey kalıp kalmadığına bakın:
git -C ../locale-guide-label status --short --ignoredDeğişmiş ve yeni dosyalar hemen görünür; yok sayılan dosyaları --ignored bayrağı gösterir. Yerel yapılandırma dosyaları ve notlar çoğu zaman tam da bunların arasındadır. Sonucun doğru dala kaydedildiğinden eminseniz ana klasörden şu komutla klasörü kaldırın:
git worktree remove ../locale-guide-label
git worktree listİzlenen dosyalarda değişiklik veya yok sayılmayan yeni dosyalar varsa Git genellikle klasörü kaldırmayı reddeder:
fatal: '../locale-guide-label' contains modified or untracked files, use --force to delete itMesajdaki öneriyi ilk iş olarak uygulamayın. Dosyaları kontrol edin ve gerekli olanları kaydedin. Commit edilmemiş veriler klasör silindikten sonra Git aracılığıyla kurtarılamayabilir. Bu reddi tam bir koruma sanmayın: yok sayılan dosyalar --force olmadan da silinebilir, bu yüzden onları ayrıca kontrol ettik.
Kolayca gözden kaçan bir ayrıntı daha var. Git komutu çalışma klasörünü kaldırır, dalı değil; fix/label sonrasında git branch listesinde kalır. Bu kullanışlıdır, sonuç ortadan kaybolmaz. Dal artık gerçekten gerekmiyorsa ve içindeki gerekli her şey birleştirildiyse dalı ayrıca silin.
--worktree ile başlatılan oturumdan çıktığınızda Claude Code klasörü kontrol eder. Klasörde değişiklik veya yeni commit yoksa ve oturumun adı belirlenmemişse, sormadan klasörü ve dalı kendisi siler. Çalışma varsa klasörü tutmak mı silmek mi istediğinizi sorar. Bu diyalogda silmeyi seçmek hem klasörü hem Claude Code'un oluşturduğu dalı içindekilerle birlikte kaldırır. Yukarıdaki Git komutuyla aynı şey değil. Sonucu istiyorsanız "tut" seçeneğini belirleyip kendiniz aktarın.
Klasörü Git'i atlayarak Dosya Gezgini'nden silmeyin: depo onu hâlâ var sanır ve worktree listesinde artık bulunmayan klasörün kaydı kalır.
Claude Code'da ikinci görevi yürütün
Tüm akış altı adıma sığar:
- ikinci görevi ilkinden ayrı tanımlayın ve hangi kaydedilmiş durumdan başlayacağına karar verin;
- temel noktası açıkça belirtilmiş bir çalışma klasörü oluşturun ya da varsayılan uygunsa
claude --worktreekomutunu çalıştırın; - bir şeyi değiştirmeden önce yeni klasörde yolu ve dalı kontrol edin;
- oturuma yalnızca bu görevin bağlamını verin, diğer görevin geçmişini değil;
- değişikliği yaptığınız yerde kontrol edin ve sonucu commit edin;
- birleştirme kararını verin, klasörü ancak sonra kaldırın.
Ayrı klasör kodu kontrol etmez, işinizi sizin yerinize onaylamaz. Her görevin kendine ait çalışma dosyaları olmasını sağlar. Örneğimizde faydası açık: açıklama ayrı olarak düzeltildi ve kontrol edildi, tamamlanmamış arama ise ilk klasörde kaldı.
Kendinizi sınayın
İkinci klasörde commit edilmemiş arama yok. Bir şey mi ters gitti?
Hayır, olması gereken bu. Klasör A görevinin mevcut dosyalarından değil, main dalındaki bir commit'ten oluşturuldu. Commit edilmemiş değişiklikler kendi klasörlerinde kalır.
Aynı klasörde iki oturum açık. Görevler ayrılmış durumda mı?
Konuşmalar ayrı, dosyalar ortak. Görevler aynı bölümlere dokunursa değişiklikler birbirine karışabilir.
B dalında commit yapıldı ama açıklama main'de görünmüyor.
Beklenen bu: commit kendi dalında duruyor. Diğer dalları değiştirmez; bunun için birleştirmek gerekir.
İkinci yerel sunucu aynı portta başlamıyor.
Ayrı klasör portları ayırmaz. Sunucuyu başka bir portta başlatın.
Git çalışma klasörünü kaldırmayı reddetti.
Reddetme nedenini okuyun: kaydedilmemiş dosyaların yanı sıra klasör kilitli olabilir ya da ana çalışma klasörü olabilir. Gerekli olanları kaydedin ve durumu inceleyin. Körü körüne --force eklemeyin.
Elle pratik yapmak isterseniz birkaç commit içeren ayrı bir eğitim deposu alın: iki klasör oluşturun, yalnızca ikincideki metni değiştirin, ikisini de kontrol edin ve gereksiz klasörü kaldırın. Herhangi bir hizmete veya hesaba gerek yok.
GO TO FULL VERSION