Git Worktrees nedir?

7 Eylül 2025

Git ile çalışıyorken branch değiştirmeniz gerektiği anlar olmuştur. Bunda bir problem yok ama branch üzerinde çalışıyorken başka bir branche geçmek istediğinizde o anki değişiklikleri diğer branche geçirmek istemeyebilirsiniz. Klasik git kullanımında bir repository'nin yalnızca tek bir working directory'si olur. Yani aynı anda sadece bir branch üzerinde çalışılabilir. Bazı durumlarda bir branch üzerinde çalışıyorken acil bir mesaj gelebilir ve hotfix atmamız gerekebilir. Bu durumda ya stash yapacaksıniz ya da commit yapacaksınız. Bu pek de güzel bir deneyim değil. Git worktrees tam da bu noktada yardımcı oluyor.

Git worktrees aynı anda birden fazla working tree'yi yönetmenize olanak sağlayan built-in bir özellik. Yani aynı anda birden fazla branch'e check out yapabilmenize izin veriyor.

git worktree komutu ile ana repository'e bağlı ek working directory'ler oluşturabiliriz. Bu directory'ler aynı git geçmişini paylaşır ancak kendi branchlerinde bağımsız çalışabilirler.

$ git worktree add ../feature-x feature-x

Bu komut:

  • Ana repository'nin yanına feature-x adlı bir klasör oluşturur,
  • feature-x branch'ine checkout eder.

Artık hem ana klasör de hem de feature-x klasöründe aynı anda farklı branchler üzerinde çalışabilirsiniz.

Sık kullanılan komutlar

  • Mevcut worktree'leri listelemek
$ git worktree list
  • Yeni worktree eklemek
$ git worktree add ../branch-adi branch-adi

Klasör ve branch adının aynı olması şart değil ama aynı kullanırsanız karmaşanın önüne geçersiniz.

  • Worktree kaldırmak
$ git worktree remove branch-adi

Örnek Senaryo

Diyelim ki dev branch'indesiniz ve büyük bir refacto çalışması yapıyorsunuz. Tam bu sırada production'da bir hata fark edildi ve hotfix geçmeniz gerekiyor.

Normalde yapacaklarınız:

  1. dev branch'i üzerindeki refactor değişikliklerini stash veya commit.
  2. git checkout hotfix/login-bug
  3. Hata düzeltmesi yap.
  4. dev branch'ine geri dön ve refactor'e devam et.

Worktree ile yapacaklarınız:

  1. git worktree add ../hotfix-login -b hotfix-login

(-b parametresi, branch mevcut değilse oluşturup checkout eder. Eğer branch zaten varsa -b parametresine gerek yoktur.)

  1. Yeni klasöre gidip hatayı düzelt.
  2. Refactor klasörüne dön ve çalışmaya devam et.

Worktree ile yapılacak adımlar ve karmaşa azaldı.

📝 Dipnot: Oluşan worktree'ler bir üst dizinde ana repository'nin yanında oluştuğu için ana repository'yi bir üst klasörde sarmalayabilir ya da worktree'ler için /project-x-worktrees şeklinde bir üst klasör yapmak isteyebilirsiniz. Bu durumda yeni bir worktree oluştururken git worktree add ../project-x-worktrees/feature-x feature-x şeklinde kullanmaya dikkat etmelisiniz ki klasör düzeniniz karmaşıklaşmasın.

Git Worktrees, özellikle aynı anda birden fazla branch üzerinde çalışmanız gerektiğinde işleri büyük ölçüde kolaylaştıran bir özellik. Küçük projelerde ihtiyaç duymayabilirsiniz, ancak orta ve büyük projelerde context switch yaparken zaman kazanmak ve düzenli kalmak adına size yardımcı olabilir.