Git Branch Mantığı ve Kullanımı

Kübra Özden
7 min readNov 13, 2023

--

Git branch, bir projenin ana dalından (master branch) ayrı olarak çalışan ve değişiklikleri depolayan bir yapıdır. Branchlar, bir projede birden fazla değişiklik yapmak istediğinizde, farklı özelliklerin veya hata düzeltmelerinin geliştirilmesini ayrı olarak yönetmenize olanak tanır.

Branchlar, bir projede geliştirme yaparken aşağıdaki avantajları sağlar:

  • Değiştirmelerin ana daldan izole edilmesini sağlar. Bu, yeni bir özellik üzerinde çalışırken veya bir hatayı düzeltirken, değişikliklerin ana dalda bulunan mevcut kodla çakışmasını önler.
  • Değişikliklerin test edilmesini ve geri alınmasını kolaylaştırır. Bir branch üzerinde çalışırken, değişiklikleri test etmek ve geri almak daha kolaydır. Bu, bir hata yaparsanız veya değişikliklerin ana dalda beklendiği gibi çalışmadığını fark ederseniz yardımcı olur.
  • Projenin farklı sürümlerini yönetmeyi kolaylaştırır. Branchlar, bir projenin farklı sürümlerini yönetmenize olanak tanır. Örneğin, bir yeni özellik üzerinde çalışırken, ana dalda bulunan mevcut kodla uyumlu bir sürüm oluşturmak için bir geliştirme branch’i kullanabilirsiniz.

Git branch’leri oluşturmak ve yönetmek için aşağıdaki komutları kullanabilirsiniz:

  • branch oluşturma: git branch <branch_adı>
  • aktif branch’i değiştirme: git checkout <branch_adı>
  • branch’i birleştirme: git merge <branch_adı>
  • branch’i silme: git branch -d <branch_adı>

Branchlar, Git’in en önemli kavramlarından biridir. Bir projede geliştirme yaparken, değişiklikleri izole etmek, test etmek ve geri almak için branchlardan yararlanmak önemlidir.

Git Branch Kullanımı

Head → master olarak gördüğümüz şey ana branch olarak kullanılır.

  • Ana branch şu demek “son hali “ . Çok büyük bir proje düşünün ve içerisinde 300 tane yazılımcı çalışıyor bu 300 tane yazılımcı sürekli bir şey geliştiriyor ve hepsi ayrı branch lerde geliştiriyor. Herkesin işi bittikçe main branche yani ana branche aktarılıyor. Ve ana branche’deki yani gördüğümüz proje yayına alınıyor.
  • PEKİ HEAD NE ?

Master’ı anladık ama head ne ? aslında head dediğimiz olay bizim Git içerisinde nerede, hangi konumda olduğumuzu gösteriyor. Genelde son commiti gösterir.

  • Burada son commiti , master branch’de olduğumuzu ve head’de o commit’de olduğumuzu gösterir.
  • Fakat branchler açtıkça bu durum değişebilir. Master değil de başka bir branch gözükebilir. Son commit de olma durumu da değişebilir.
  • Bu head bizim güncel konumumuzu veriyor. Hem commit olarak hem branch olarak
  • Git log komutunu çalıştırdığımızda bulunduğumuz branch de son commit üzerinde oluruz. görseldeki gibi
  • git branch feat komutu ile yeni bir branch açabiliyoruz. (feat -feature : yeni bir özellik anlamında )
  • Her iki branch de aynı commit de olabilir. Aynı bilgiye sahip ama head feat ‘ e geçiyor ( yani imleç gibi düşün )
  • Eğer yeni branch de bir commit atarsam (git commit ) head yine o branch’in içinde olmaya devam ediyor. Yani güncel olduğum yeri gösteriyor kısacası
  • Bir commit (git commit ) daha atarsak head feat’de olmaya devam ediyor.
  • Sonrasında git switch master komutunu çalıştırarak master branch e yani ana branch e geri dönebiliriz.
  • master branch de commit atmaya ( git commit )başladık
  • Buradaki işimizi de hallettik diyelim ve yeni açtığım branch deki işim de bitmişti bunları halledip buluşturalım iksini birbirine bağlayalım, yani git merge feat yapıyoruz.
  • Merge yapmak birleştirmek demek, ikisini birbirine birleştirdik daha doğrusu yeni açtığım branch’i aldık master branche birleştirdik artık master branch de yeni bir commit var ve head buraya geçti.
  • Kitap klasörümüzü oluşturup içerisine ilkbolum.txt dosyası kaydettik bu dosyanın içeriğine birşeyler ekleyip “ilk bolum başlığı yazıldı” şeklinde ilk commiti attık. git log ile varolan commitleri görebiliriz.
  • Varolan branchleri öğrenmek için git branch komutunu kullanıyoruz.
  • ilkbolum.txt dosyamıza yeni satırlar ekledik. Şimdi bu satırları bash de indeksleyip commit edeceğiz.
  • git status dediğimizde yapılan değişiklikleri indekslemediğimiz için uyarı veriyor git add . ile indexledik .

Bu nokta itibariyle yeni bir branch açmak istiyoruz. Deneysel bir şey denemek için, karıştırmak istemediğim bir şey için veya başkalarıyle da çalışabilirim. Projenin kendi master branch ini bozmak istemeyiz yeni bir şey koymak istiyorsak yeni bir özellik falan deneyeceksek onu başka bir branch de deneriz oluyorsa birleştiririz.

  • git branch feature komutu ile feature adında yeni bir branch oluşturduk. git branch dediğimizde varolan branchleri bize gösterir ve hangi branchde olduğumuz da yeşil renklidir.
  • git switch feature komutu ile feature branch’e gidiyoruz. Ardından git branch dediğimizde de feature branch yeşil renkte ve yıldız olduğu için feature branchinde olduğumuzu görebiliyoruz.
  • git log dediğimizde hala daha önce çalıştırdığımız commitleri görebiliyoruz son commit head → feature, master gösteriyor. Yani bu commit hem feature da hem master da
  • Yukarıda görsel olarak hangi aşamada olduğumuzu görerek daha iyi anlayabiliriz yani feat’i oluşturduk head burada ama içerisinde daha bişey yapmadık

Feat içerisinde yapacağımız commitleri çok ayrıştırıcı olsun diye yeni bir txt dosyası oluşturuyoruz ve birkaç satır bişeyler yazıyoruz.

  • git add . ile bu değişiklikleri indexledikten sonra commitliyoruz. git log dediğimizde son commitin feature da yapıldığını diğer commitlerin master da olduğunu görebiliyoruz.
  • ikinci satırı da ekledikten sonra indexleyip commitledik. git log diyerek bu commitlerin hangi branchlerde olduğunu görebiliyoruz.
  • Head’i başka bir branch’e ya da master branch’e getirelim. Yani güncel konumumuzu master’a döndürelim
  • git switch master dediğimizde yani master branche geçtiğimizde sublime text de deneysel.txt gitti ve save edilmemiş bir dosya olarak görünüyor. Bunu kaydetmeden silelim bakalım ve feature branch’e geri dönelim
  • git switch feature dediğimizde deneysel.txt geri geldi. Yani aslında deneysel.txt sadece feature içerisinde bulunuyor. master branche gidince sublimtext den kayboluyor.
  • ilkbolum.txt ye satırlar ekledik ve bunları master branch de yaptık commitledik. (dikkat edersek deneysel.txt dosyası görünmüyor çünkü o feature branch de )
  • Şimdi feature branch e gittiğimizde ne olacak bakalım ?
  • !! DİKKAT edersek feature branch e gittiğimizde master branch de iken ilkbolum.txt dosyası üzerinde yaptığımız son değişiklikler görünmüyor !! çünkü o satırlar master branch de commit olarak atıldı dolayısıyla başka bir branch de iken o değişiklikler görünmez
  • İki branchde de ortak olan commitler görünür. Branchlerin kendi içerisinde atılan commitler yani yapılan değişiklikler diğerlerinde görünmez

Şimdi bunları yani bu farklı branchleri birleştireceğiz. Hangisini içeri alacaksak onu komuta yazmamız gerekiyor. Feature branch i master brance ekleyeceksel birleştireceksek komutu git merge feature böyle yazmamız gerekiyor.

  • ilk önce master branch e gidiyoruz ve git merge feature komutunu burada giriyoruz . Komutu çalıştırdığımızda bir commit mesajı girmemiz için sublimetext de pencere açılıyor burada zaten default olarak Merge branch ‘feature’ mesajını görüyoruz istersek değiştirebiliriz. Save edip kapattığımızda artık bir birleştirme işlemi yapılmış ve bir birleştirme commiti atılmış oldu.
  • merge işlemi yapıldıktan sonra dosyamıza baktığımızda hem ilkbolum.txt var hem deneysel.txt var.
  • Bir önceki yazım olan Git Temelleri yazımı inceleyerek başlamakta fayda var. Daha fazla içerik için takip etmeyi unutmayın 🙂

Kaynaklar :

  • Öncelikle bu güzel bilgileri edindiğim kaynak olan, hocam Atıl Samancığolu’na teşekkür ederim. Sizde Versiyon kontrol sistemleri hakkında daha detaylı bilgi edinmek, Git ve Github kullanımı konusunda takıldığınız noktalarda bilgi edinmek isterseniz linkte verilen ücretsiz eğitime katılabilirsiniz

--

--