Branch'ler, aynı projedeki farklı çalışma kollarını birbirine engel olmadan paralel yürütmenizi sağlar. Bu makalede branch'in ne olduğunu ve neden kullanıldığını öğrenecek; branch oluşturmayı, aralarında geçiş yapmayı, değişiklikleri birleştirmeyi ve IDE araçlarıyla merge çatışmalarını sakince çözmeyi göreceksiniz. Claude Code'un repository'nizde ayrı bir branch üzerinde çalışırken ne yaptığını anlamak için gereken temel de bu.

Örnekler ve ekran görüntüleri JetBrains IDE'lerinden alınmıştır; eylemlerin adları ve konumları kullandığınız sürümde farklı olabilir. Alıştırmalar için ayrı bir eğitim repository'si kullanın. Gerçek bir iş projesinde ise o projenin branch, commit ve değişiklik gönderme kurallarına uyun.

Branch nedir, neden kullanılır

Branch, ayrı bir commit dizisine verilen addır. Branch oluşturmak proje klasörünü kopyalamaz ve commit edilmemiş dosyaları kaydetmez. Normal bir çalışma klasöründe başka bir branch'e geçtiğinizde Git dosyaları seçilen branch'e göre günceller; tamamlanmamış değişiklikler sizinle birlikte taşınabilir ya da geçişi engelleyebilir.

Üst çizgi main'i, alt çizgi feature/new-idea'yı gösterir. Birleştirmeden sonra main, iki ebeveyni E ve D olan M'ye işaret eder.ABEMCD
Üst çizgi main'i, alt çizgi feature/new-idea'yı gösterir. Birleştirmeden sonra main, iki ebeveyni E ve D olan M'ye işaret eder.

Ana branch main'den, ayrı bir geliştirme kolu için yeni bir branch açılır: feature/new-idea. İş tamamlandığında değişiklikler tekrar main branch'iyle birleştirilir.

Diyelim ki projenizde kapsamlı bir değişiklik yapmak ya da riskli bir deneme gerçekleştirmek istiyorsunuz. Git olmasaydı ne yapardınız? Büyük olasılıkla tüm projeyi yeni bir klasöre kopyalayıp orada çalışırdınız. Sonucu beğenseydiniz ana klasöre taşırdınız, beğenmeseydiniz kopyayı silip geçerdiniz.

Kopya benzetmesi farklı çalışma seçeneklerini anlamaya yardımcı olur, ama teknik olarak branch, bir commit'i gösteren işaretçidir. Bunu bir kitap üzerinden düşünelim:

  1. elinizde bitmiş bir el yazması vardır (bu, ana branch'iniz olan main);
  2. alternatif bir son yazmak istersiniz (örneğin feature/new-idea branch'ini oluşturursunuz);
  3. ana metne dokunmadan yeni sonu yazarsınız (yeni branch'te çalışırsınız);
  4. yeni son daha iyi olursa eskisinin yerine koyarsınız (branch'leri merge ile birleştirirsiniz);
  5. eski ve artık gerekmeyen taslağı silebilirsiniz (branch'i silersiniz).
Claude Code ile bağlantısı

Önce Claude Code'dan branch'i ve mevcut değişiklikleri göstermesini isteyin. Ayrı bir branch, projenin kurallarına uygunsa oluşturulur. Kaydedilmiş commit'ler geri dönmek için bir nokta sağlar; branch adını silmek tek başına dosyalardaki değişiklikleri geri almaz ve önceki durumu geri getirmez.

Yeni branch oluşturma ve branch'te çalışma

Adım 1. Branch yönetimi menüsünü açın.

Ana araç çubuğunda, proje adının yanında geçerli branch'in adını gösteren bir widget bulunur (varsayılan olarak main). Widget'a tıklayıp + New Branch'i seçin.

Sol üst köşedeki branch widget'ı

Adım 2. Yeni branch'e ad verin.

Branch'e üzerinde çalıştığınız göreve göre ad vermek iyi bir alışkanlıktır. Örneğin feature/add-usage-examples.

Yeni branch oluşturma penceresi

Oluşturma sırasında Checkout branch seçeneği işaretliyse IDE yeni branch'e geçer. Dosyaları düzenlemeden önce adını widget'tan kontrol edin.

Adım 3. Değişiklikleri yapıp commit edin.

README.md dosyasına kullanım örnekleri içeren bir bölüm ekleyin. Değişiklikleri gözden geçirip alıştığınız şekilde commit edin: yeni branch'in geçmişinde kaydedilmiş bir anlık görüntü oluşur.

Yeni branch'te commit
Claude Code ile bağlantısı

Claude Code commit oluşturmayı önerdiğinde yaptığı tam olarak budur: mevcut değişiklikleri daha sonra geri dönebileceğiniz bir nokta olarak kaydeder. Onaylamadan önce commit mesajını okuyun; nelerin değiştiğini anlatır ve kolayca düzenlenebilir.

Branch'ler arasında geçiş

Kullanım örneklerini içeren değişiklikleriniz artık feature/add-usage-examples branch'inde güvenle kaydedildi. Şimdi ana branch olan main'e dönüp orada neler olduğuna bakalım.

Adım 1. Sol üst köşedeki geçerli branch adını gösteren widget'a yeniden tıklayın.

Adım 2. Local veya Recent listesinden main branch'ini seçip açılan alt menüde Checkout'a tıklayın.

main branch'ine geçiş

Adım 3. Sonucu kontrol edin.

Geçiş yaptıktan sonra README.md dosyasını açın. Kullanım örnekleri bölümünün bu dosyada olmadığını göreceksiniz; bölüm diğer branch'te kaldı. Böylece main branch'indeki kararlı sürüme dokunmadan yeni özellikler üzerinde çalışabilirsiniz.

Diğer branch'teki değişikliklerden etkilenmeyen dosya

Branch'leri birleştirme

merge, seçilen branch'in geçmişini geçerli branch ile birleştirir. main, branch oluşturulduktan sonra ilerlemediyse fast-forward mümkün olur: main yeni bir commit oluşturmadan C3'e ilerler. Geçmişler ayrıştıysa normal birleştirme iki ebeveynli bir commit oluşturur.

main yeni commit olmadan C2'den C3'e ilerlerC1C2C3
main yeni commit olmadan C2'den C3'e ilerler

Gösterilen doğrusal durumda main, C3'e ilerleyebilir. feature/add-usage-examples branch'i de şimdilik C3'ü gösteriyor; birleştirme için branch adını silmeniz gerekmez.

feature/add-usage-examples branch'indeki işinizi tamamladınız ve bu değişiklikleri ana projeye eklemek istiyorsunuz.

Adım 1. Hedef branch'e geçin.

Değişiklikleri NEREYE eklemek istiyorsanız o branch'te olduğunuzdan emin olun. Bizim örneğimizde bu branch main.

Adım 2. Birleştirme işlemini yapın.

Branch yönetimi widget'ına yeniden tıklayın. Listeden değişiklikleri NEREDEN almak istiyorsanız o branch'i seçin (feature/add-usage-examples) ve alt menüden Merge 'feature/add-usage-examples' into 'main' seçeneğine tıklayın.

Branch'leri birleştirme işlemi

Adım 3. Sonucu kontrol edin.

Artık main branch'indeki README.md dosyasında yeni örnekler bölümünüz yer alıyor. Çalışmanızı projenin ana sürümüyle başarıyla birleştirdiniz.

Başarılı birleştirme

Birleştirme çatışmaları

Çatışma, Git'in değişiklikleri otomatik olarak birleştiremediği anlamına gelir. Sık görülen bir durum, aynı satırların farklı biçimde düzenlenmesidir; bir branch'te dosyanın silinip diğerinde değiştirilmesi de çatışmaya yol açabilir. Çözümü, elde edilmesi gereken sonuca göre seçersiniz.

IDE'nizin (CLion veya IntelliJ IDEA) yerleşik araçlarının gücü asıl burada ortaya çıkar. Çatışmaları terminalde çözmek pek keyifli değil; yerleşik üç yönlü birleştirme aracı (3-way merge) ise süreci anlaşılır ve kolay hale getirir.

C1 ortak atasına sahip iki branchC1C2C3
C1 ortak atasına sahip iki branch

C1 ortak atasından sonra iki branch'e de yeni commit'ler eklendi. Geçmişin ayrışması tek başına çatışma olacağını göstermez; çatışma, Git değişiklikleri otomatik olarak birleştiremediğinde oluşur. Aşağıdaki alıştırmada aynı orijinal satırı iki farklı metinle değiştireceksiniz.

Bir çatışma oluşturalım:

  1. main branch'inde olduğunuzdan emin olun ve Commit penceresinde commit edilmemiş değişiklik ya da yeni dosya bulunmadığını kontrol edin;
  2. feature/new-title adında yeni bir branch oluşturun, ancak şimdilik bu branch'e geçmeyin. Checkout branch kutusunun işaretli olmadığını kontrol edin;
  3. main branch'indeyken README.md dosyasının ilk satırını "Harika Projem" olarak değiştirin ve commit yapın;
  4. feature/new-title branch'ine geçin. README.md dosyasının ilk satırının eski haliyle kaldığını göreceksiniz; branch oluşturulduğundaki dosya durumu budur. Aynı satırı "Süper Projem" olarak değiştirin ve commit yapın;
  5. main branch'ine dönün ve feature/new-title branch'ini merge edin.

Artık Git iki geçmişin de aynı yerde değiştiğini görecek. Çatışmayı çözmeniz için Merge Conflicts penceresini açacak.

Çatışmaları gösteren pencere

Çatışma çözme aracını açmak için Merge düğmesine tıklayın. Burada şunları göreceksiniz:

  • solda (Your changes) - geçerli branch'inizdeki dosya sürümü (değişiklikleri eklediğiniz yer, main);
  • sağda (Changes from branch) - birleştirdiğiniz branch'teki dosya sürümü;
  • ortada (Result) - elle oluşturmanız gereken son dosya sürümü.
Üç yönlü çatışma çözme penceresi

Bir seçeneğin tamamını kabul etmek için >> veya << oklarına (ya da iptal etmek için çarpı işaretlerine) tıklayabilirsiniz. İsterseniz doğru metni doğrudan orta panele de yazabilirsiniz.

Orta paneldeki sonucu kontrol edip Apply düğmesine veya işlemi tamamlayan karşılık gelen düğmeye tıklayın. Ardından Git durumuna bakın: birleştirme henüz commit edilmediyse IDE üzerinden commit edin. Çatışma satırlarını çözmekle merge işlemini tamamlamak farklı adımlardır. Ortaya çıkan kodun davranışını da kontrol edin.

Claude Code ile bağlantısı

Claude Code ile çalışırken çatışma oluşması bir arıza değildir: Claude durup yardımınızı isteyebilir veya değişiklikleri nasıl ayırabileceğinizi önerebilir. Bu çatışmayı da diğerleri gibi IDE'nin üç yönlü birleştirme aracıyla çözersiniz.

Çatışma neden bazen oluşmaz

Alıştırmada çatışma oluşmazsa ikinci branch'in hangi commit'ten oluşturulduğunu ve iki tarafın da aynı satırı farklı biçimde değiştirip değiştirmediğini kontrol edin. Git, ayrışmış branch'lerde bile uyumlu düzenlemeleri otomatik olarak birleştirebilir. Bir başka olasılık da fast-forward yapılabilen doğrusal bir geçmiş olmasıdır:

Örnek:

  1. main branch'inde bir commit'iniz var (örneğin C1);
  2. main branch'inde "Harika Projem" metniyle yeni bir commit oluşturursunuz. Böylece main branch'i C2 commit'ini göstermeye başlar;
  3. main branch'inin mevcut konumundan feature/new-title branch'ini oluşturursunuz; yeni branch de C2 commit'inden başlar;
  4. feature/new-title branch'inde "Süper Projem" metniyle bir commit oluşturursunuz. Bu branch ilerleyip C3 commit'ini gösterir;
  5. hâlâ C2 commit'inde olan main branch'ine dönüp feature/new-title branch'iyle birleştirirsiniz.

Git, main branch'inin feature/new-title branch'inin doğrudan atası olduğunu görür: başka branch'te çalıştığınız sırada main'e yeni commit eklenmemiştir. Bu nedenle main işaretçisini doğrudan C3 commit'ine ilerletir; çatışma çıkmaz.

main yeni commit olmadan C2'den C3'e ilerlerC1C2C3
main yeni commit olmadan C2'den C3'e ilerler

main branch'inin geçmişi feature/new-title branch'inin geçmişiyle ayrışmadan devam eder; bu yüzden Git main'i ileri alır ve çatışma oluşmaz.

Değişiklik geçmişini görüntüleme

Projenizde neler olduğunu daha iyi anlamak için geçmişini incelemek faydalıdır.

Git aracının penceresini açın (genellikle sol kenar çubuğunda veya IDE penceresinin alt kısmında bir simge bulunur) ve Git araç çubuğunda Log veya Show Git Log sekmesini seçin. Tüm branch'lerin ve commit'lerin grafik gösterimini göreceksiniz. Böylece hangi branch'in nereden ayrıldığını ve nerede birleştirildiğini takip edebilirsiniz.

Git Log penceresi

Burada herhangi bir commit'e tıklayarak hangi değişiklikleri içerdiğini, kim tarafından ve ne zaman oluşturulduğunu görebilirsiniz. Kodunuz için adeta bir zaman makinesi.

Claude Code ile bağlantısı

Claude Code'un yaptığı değişiklikler normal commit'lerle kaydedildiğinde bu geçmişe eklenir. Git Log'da kendi commit'lerinizle aynı şekilde görünürler; herhangi birini açıp nelerin değiştiğini kontrol edebilirsiniz.

Claude Code ile birlikte nasıl çalışır

Branch'leri anladıktan sonra Claude Code'un repository'nizde çalışırken neler yaptığını takip etmek kolaylaşır. Bu teknolojiyi sizin için nasıl kullandığına ve nelere dikkat etmeniz gerektiğine bakalım:

  • görev ve proje kuralları gerektiriyorsa ayrı bir branch oluşturur;
  • önemli noktalarda commit oluşturmayı önerir; diff'i okuyup kabul etmeye veya düzeltmeye siz karar verirsiniz;
  • gereken kaydedilmiş commit'i bulmanıza ve commit edilmemiş değişiklikleri göz önünde bulundurarak geri dönme yöntemini seçmenize yardımcı olur;
  • birleştirme çatışmasında yardımınızı isteyebilir; çözüm yine aynı IDE aracıyla yapılır;
  • pull request hazırlayıp yorumlayabilir (PR, bir branch'i ana branch'e birleştirme önerisidir; örneğin GitHub CLI üzerinden açılır).
Claude Code ile bağlantısı

Onaylamadan önce diff'i inceleyin; özellikle Claude dosya silmeyi veya merge yapmayı önerdiğinde. Böylece projenin geçmişine tam olarak neyin ekleneceğini bilirsiniz.

Önceki makale: Git ile günlük çalışma · Sonraki makale: Pull request oluşturma ve birleştirme