Git Branch Nedir? Branch Oluşturma ve Yönetimi Rehberi

Git branch nedir, nasıl oluşturulur ve yönetilir? Bu kapsamlı rehberde git branch, git switch ve git checkout komutlarını, main ve feature branch mantığını, GitHub'a branch göndermeyi ve güvenli branch silme yöntemlerini uygulamalı örneklerle öğrenin.

Git Branch Nedir? Yazılım Projelerinde Branch Kullanımı

Bir yazılım projesi geliştirirken aynı anda birden fazla özellik üzerinde çalışmanız gerekebilir. Örneğin bir web sitesine yeni bir giriş ekranı eklerken başka bir geliştirici ödeme sistemindeki hataları düzeltiyor olabilir.

Peki farklı geliştiriciler aynı proje üzerinde çalışırken birbirlerinin kodlarını nasıl etkilemeden geliştirme yapabilir?

Git bu soruna branch adı verilen dallanma sistemiyle çözüm sunar.

Git branch, yazılım projelerinin farklı geliştirme hatları üzerinde çalışılmasını sağlayan temel bir Git özelliğidir.

Bu eğitimde Git branch kavramını, branch oluşturmayı, branch değiştirmeyi, branch silmeyi ve GitHub üzerinde branch yönetimini adım adım öğreneceğiz.

Öğreneceğimiz temel komutlar arasında git branch, git switch, git checkout, git branch -d ve git push bulunmaktadır.

1. Git Branch Nedir?

Git branch, bir Git deposunun commit geçmişinde ayrı bir geliştirme hattını temsil eden işaretçidir.

Branch kullanarak bir yazılım projesi üzerinde yeni özellikler geliştirebilir, hataları düzeltebilir veya deneysel çalışmalar gerçekleştirebilirsiniz.

Bu değişiklikleri ana geliştirme hattından ayrı commit kayıtlarında tutabilirsiniz.

Örneğin bir e-ticaret sitesi geliştirdiğinizi düşünelim.

Projenizde aşağıdaki özellikler bulunuyor:

  • Kullanıcı giriş sistemi
  • Ürün listeleme sayfası
  • Alışveriş sepeti
  • Ödeme sistemi

Şimdi ödeme sistemine yeni bir özellik eklemek istiyorsunuz.

Bu özelliği doğrudan ana geliştirme dalında hazırlamak yerine ayrı bir branch oluşturabilirsiniz.

Örneğin:

main
feature/odeme-sistemi

Burada main ana geliştirme hattını temsil ederken feature/odeme-sistemi yeni ödeme özelliğinin geliştirildiği branch'tir.

Özellik tamamlandığında değişiklikler uygun inceleme ve birleştirme süreciyle ana geliştirme hattına aktarılabilir.

2. Git Branch Neden Kullanılır?

Branch sistemi, modern yazılım geliştirme süreçlerinin önemli parçalarından biridir.

Özellikle takım halinde geliştirilen projelerde branch kullanmak işleri daha düzenli yönetmeye yardımcı olur.

Bağımsız Özellik Geliştirme

Yeni bir özellik geliştirirken ana branch üzerinde doğrudan değişiklik yapmak zorunda kalmazsınız.

Örneğin bir mobil uygulamada yeni bildirim sistemi geliştirmek için ayrı bir branch oluşturabilirsiniz.

Hata Düzeltme

Mevcut uygulamanızda bir hata bulunduğunda yalnızca bu hatayı düzeltmek için yeni bir branch açabilirsiniz.

Örneğin:

fix/login-error

Bu branch üzerinde giriş hatasını düzelttikten sonra değişiklikleri test edebilirsiniz.

Takım Çalışması

Birden fazla geliştirici aynı Git deposu üzerinde farklı branch'lerde çalışabilir.

Örneğin:

main
|
|-- feature/login
|
|-- feature/payment
|
|-- fix/navbar
|
|-- feature/profile

Bu yapı sayesinde geliştiriciler kendi çalışmalarını ayrı commit geçmişlerinde sürdürebilir.

Ancak farklı branch'lerde çalışmak, değişiklikler birleştirilirken hiçbir zaman çakışma olmayacağı anlamına gelmez.

Aynı dosyaların aynı bölümlerinde yapılan değişiklikler birleştirme sırasında conflict oluşturabilir.

Deneysel Çalışmalar

Yeni bir tasarımı veya farklı bir algoritmayı denemek için ayrı branch oluşturabilirsiniz.

Deney başarısız olursa ana branch'in geçmişini değiştirmeden çalışmayı bırakabilirsiniz.

3. Main Branch Nedir?

Git projelerinde ana geliştirme hattı için yaygın olarak kullanılan branch ismi main şeklindedir.

Main branch genellikle projenin temel geliştirme hattını temsil eder.

GitHub üzerinde yeni oluşturulan pek çok repository'de varsayılan branch adı main olarak kullanılır.

Ancak önemli bir ayrıntı vardır: Her Git deposunun ana branch ismi zorunlu olarak main değildir.

Bazı projelerde master, develop veya farklı branch isimleri kullanılabilir.

Bir Git deposunun varsayılan branch ismi proje yapılandırmasına bağlıdır.

Örneğin:

main
 |
 |-- Commit A
 |-- Commit B
 |-- Commit C

Bu örnekte main branch, Commit C kaydını göstermektedir.

Yeni bir commit oluşturulduğunda aktif branch'in işaret ettiği commit güncellenir.

4. Git Branch Mantığı Nasıl Çalışır?

Git branch sistemini anlamanın en kolay yollarından biri commit geçmişini görselleştirmektir.

Örneğin aşağıdaki commit geçmişine sahip olduğumuzu düşünelim:

A --- B --- C
            |
           main

Bu aşamada projemizde üç commit bulunmaktadır.

Şimdi yeni bir özellik geliştirmek için feature/login isimli branch oluşturalım.

A --- B --- C
            |
           main
            |
       feature/login

Yeni branch başlangıçta main ile aynı commit'i göstermektedir.

Feature branch üzerinde yeni commit oluşturduğumuzda geçmiş şu şekilde ilerleyebilir:

A --- B --- C -------- main
             \
              D --- E  feature/login

Burada D ve E commit kayıtları feature/login branch üzerinde oluşturulmuştur.

Main branch ise hâlâ C commit'ini göstermektedir.

Branch'ler üzerinde bağımsız geliştirme yapmanın temel mantığı budur.

Önemli bir nokta: Git branch, projenin tamamen bağımsız ikinci bir klasörünü oluşturmaz. Git, branch'leri commit geçmişindeki işaretçiler aracılığıyla yönetir.

5. Git Branch Komutu Nedir?

git branch komutu, Git deposundaki branch'leri görüntülemek, oluşturmak, yeniden adlandırmak ve silmek için kullanılır.

Mevcut yerel branch'leri görüntülemek için terminalde aşağıdaki komutu çalıştırın:

git branch

Örnek çıktı:

* main
  feature/login
  feature/payment

Buradaki yıldız (*) işareti aktif branch'i gösterir.

Yani şu anda main branch üzerinde çalışıyoruz.

Aktif branch ismini tek başına görüntülemek için:

git branch --show-current

Örnek çıktı:

main

Tüm Branch'leri Görüntüleme

Hem yerel branch'leri hem de Git tarafından bilinen uzak branch referanslarını görüntülemek için:

git branch -a

Komutunu kullanabilirsiniz.

Örnek çıktı:

* main
  feature/login
  remotes/origin/main
  remotes/origin/feature/payment

Burada remotes/origin altında görüntülenen isimler, uzak repository'deki branch'lere ilişkin yerel remote-tracking referanslarıdır.

Bu liste uzak sunucunun anlık durumunu her zaman yansıtmayabilir. Güncel referansları almak için gerektiğinde git fetch kullanılabilir.

6. Git Branch Nasıl Oluşturulur?

Yeni bir branch oluşturmak için git branch komutundan sonra branch ismini yazabilirsiniz.

Örneğin:

git branch feature/login

Bu komut feature/login isminde yeni bir branch oluşturur.

Ancak önemli bir ayrıntı bulunmaktadır.

git branch komutu yeni bir branch oluşturur fakat otomatik olarak o branch'e geçiş yapmaz.

Yani komutu çalıştırdıktan sonra hâlâ mevcut branch üzerinde olabilirsiniz.

Kontrol etmek için:

git branch

Örnek çıktı:

* main
  feature/login

Yıldız işareti main branch'in hâlâ aktif olduğunu göstermektedir.

Yeni oluşturduğumuz branch'e geçmek için farklı bir komut kullanmamız gerekir.

7. Git Switch Nedir?

git switch, Git deposundaki mevcut branch'ler arasında geçiş yapmak için kullanılan komuttur.

Örneğin feature/login branch'ine geçmek için:

git switch feature/login

Bu komut başarılı olduğunda aktif branch değişir.

Ardından:

git branch

Komutunu çalıştırdığınızda şu çıktıyı görebilirsiniz:

  main
* feature/login

Artık feature/login branch üzerinde çalışıyoruz.

Bu aşamadan sonra oluşturacağımız commit kayıtları aktif branch'in geçmişini ilerletecektir.

Main Branch'e Geri Dönme

Ana geliştirme branch'ine dönmek için:

git switch main

Komutunu kullanabilirsiniz.

Git, uygun koşullarda çalışma klasöründeki dosyaları seçilen branch'in sürümüne göre günceller.

Bu nedenle farklı branch'lerde farklı dosya içerikleri görüntüleyebilirsiniz.

Önceki Branch'e Hızlı Dönme

Git, daha önce bulunduğunuz branch'e hızlıca dönmek için özel bir kullanım sunar:

git switch -

Bu komut, en son geçiş yaptığınız önceki branch'e dönmenizi sağlar.

Özellikle iki branch arasında sık geçiş yaparken oldukça kullanışlıdır.

8. Git Switch -c Nedir?

Günlük yazılım geliştirmede branch oluşturmak ve hemen o branch üzerinde çalışmaya başlamak sık karşılaşılan bir ihtiyaçtır.

Bu işlem için iki ayrı komut yazabilirsiniz:

git branch feature/profile
git switch feature/profile

Ancak aynı işlemi tek komutla gerçekleştirmek de mümkündür.

git switch -c feature/profile

Buradaki -c parametresi create anlamına gelir.

Komut yeni branch'i oluşturur ve aktif branch'i bu yeni dala geçirir.

Yeni özellik geliştirmeye başlarken en sık kullanabileceğiniz Git komutlarından biridir.

Örnek Kullanımlar

git switch -c feature/login

git switch -c feature/payment

git switch -c fix/navbar

git switch -c feature/dark-mode

Bu komutlar birbirinden bağımsız örneklerdir. Her biri bulunduğunuz commit'ten yeni bir branch oluşturarak o branch'e geçer.

9. Git Checkout ile Git Switch Arasındaki Fark

Git'in eski eğitim kaynaklarında branch değiştirmek için genellikle git checkout komutunu görebilirsiniz.

Git checkout, branch değiştirme dışında dosyaları veya belirli commit durumlarını çalışma alanına getirmek gibi farklı işlemlerde de kullanılabilen geniş kapsamlı bir komuttur.

Git switch ise branch değiştirme işlemini daha açık biçimde gerçekleştirmek için sunulmuştur.

Git Checkout ile Branch Değiştirme

git checkout main

Bu komut main branch'ine geçer.

Aynı işlemin git switch karşılığı:

git switch main

Git Checkout ile Yeni Branch Oluşturma

git checkout -b feature/login

Bu komut feature/login branch'ini oluşturur ve o branch'e geçer.

Git switch ile karşılığı:

git switch -c feature/login

Her iki yöntem de geçerlidir.

İşlem Git Checkout Git Switch
Branch değiştirme git checkout main git switch main
Yeni branch oluşturma ve geçme git checkout -b yeni-branch git switch -c yeni-branch
Önceki branch'e dönme git checkout - git switch -

Yeni başlayanlar için branch işlemlerinde git switch kullanmak daha anlaşılır olabilir.

Bununla birlikte mevcut projelerde ve eski eğitim kaynaklarında git checkout komutuyla karşılaşmaya devam edeceksiniz.

10. Git HEAD Nedir?

Git branch sistemini daha iyi anlamak için HEAD kavramını öğrenmek önemlidir.

HEAD, Git'in mevcut çalışma konumunu takip etmek için kullandığı özel referanstır.

Normal branch çalışma durumunda HEAD, aktif branch'e işaret eder.

Örneğin:

HEAD
 |
 v
main
 |
 v
Commit C

Bu örnekte HEAD, main branch'ini; main ise Commit C kaydını göstermektedir.

Yeni bir branch'e geçtiğimizde HEAD'in gösterdiği branch değişir.

HEAD
 |
 v
feature/login
 |
 v
Commit C

HEAD kavramı özellikle branch değiştirme, commit geçmişinde gezinme ve eski sürümleri inceleme işlemlerinde karşımıza çıkar.

Detached HEAD Nedir?

Bazen doğrudan belirli bir commit'e geçiş yapılabilir.

Örneğin:

git switch --detach a1b2c3d

Buradaki a1b2c3d yalnızca örnek bir commit kimliğidir. Gerçek bir depoda mevcut olan geçerli bir commit kimliği kullanılmalıdır.

Bu durumda Git, doğrudan ilgili commit üzerinde çalışır ve HEAD belirli bir branch'e bağlı olmayabilir.

Bu duruma Detached HEAD adı verilir.

Detached HEAD durumunda yeni commit oluşturabilirsiniz. Ancak bu commit'leri korumak istiyorsanız uygun bir branch oluşturmanız önemlidir.

Örneğin bulunduğunuz commit'ten yeni bir branch oluşturmak için:

git switch -c inceleme-calismasi

Bu konunun ayrıntıları daha ileri Git kullanımında önem kazanır.

11. Uygulama: Gerçek Bir Projede Branch Oluşturalım

Şimdi Git branch komutlarını gerçek bir örnek üzerinde uygulayacağız.

Önceki bölümlerde oluşturduğumuz ilk-git-projem repository'sini kullanacağız.

Bu uygulamada web sitemize yeni bir iletişim sayfası ekleyeceğiz.

Ancak işlemi doğrudan main üzerinde değil, ayrı bir feature branch üzerinde gerçekleştireceğiz.

Adım 1: Proje Klasörünü Açın

Terminalinizi açın ve proje klasörünüze geçin:

cd ilk-git-projem

Ardından projenin durumunu kontrol edin:

git status

Örneğimizde kaydedilmemiş değişiklik bulunmadığını ve main branch'in aktif olduğunu varsayıyoruz.

Aktif branch'i kontrol etmek için:

git branch --show-current

Adım 2: Yeni Feature Branch Oluşturun

Şimdi iletişim sayfası geliştirmek için yeni bir branch oluşturacağız.

git switch -c feature/iletisim-sayfasi

Bu komut yeni branch'i oluşturur ve aktif branch'i değiştirir.

Kontrol etmek için:

git branch

Örnek çıktı:

  main
* feature/iletisim-sayfasi

Artık iletişim sayfamızı ana branch'ten ayrı olarak geliştirebiliriz.

Adım 3: Yeni HTML Dosyası Oluşturun

Proje klasörünüzde contact.html isimli yeni bir dosya oluşturun.

Dosyanın içerisine aşağıdaki HTML kodunu ekleyin:

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>İletişim - Nizokka Akademi</title>
</head>
<body>
    <h1>İletişim Sayfası</h1>
    <p>Bizimle iletişime geçebilirsiniz.</p>
    <a href="mailto:ornek@example.com">
        E-posta Gönder
    </a>
</body>
</html>

Bu örnekteki e-posta adresi yalnızca gösterim amaçlıdır. Gerçek projenizde kendi iletişim adresinizle değiştirebilirsiniz.

Dosyayı kaydedin.

Adım 4: Git Status ile Kontrol Edin

Terminalde aşağıdaki komutu çalıştırın:

git status

Örnek çıktı:

On branch feature/iletisim-sayfasi

Untracked files:

    contact.html

Git yeni oluşturduğumuz dosyayı tespit etti.

Ancak bu dosya henüz Git tarafından takip edilmiyor.

Adım 5: Dosyayı Staging Alanına Ekleyin

git add contact.html

Bu komut contact.html dosyasını commit için hazırlar.

Adım 6: Commit Oluşturun

git commit -m "İletişim sayfası eklendi"

Artık yeni HTML sayfamız feature/iletisim-sayfasi branch'inin commit geçmişine kaydedildi.

Adım 7: Main Branch'e Geri Dönün

Şimdi ana branch'e geri dönelim:

git switch main

Bu işlem başarılı olduğunda Git çalışma klasörünü main branch'in durumuna göre günceller.

Örneğimizde contact.html dosyası yalnızca feature branch üzerinde oluşturulup commit edildiği için main branch üzerinde bulunmayacaktır.

Bu durum dosyanın silindiği anlamına gelmez.

Dosya diğer branch'in geçmişinde güvenli şekilde bulunmaktadır.

Adım 8: Feature Branch'e Yeniden Geçin

git switch feature/iletisim-sayfasi

Şimdi contact.html dosyasının yeniden çalışma klasöründe bulunduğunu görebilirsiniz.

Çünkü Git, aktif branch'in commit geçmişine uygun dosya durumunu çalışma alanına getirir.

İşte branch sisteminin temel mantığı budur.

12. Git Branch Geçişlerinde Kaydedilmemiş Değişiklikler

Git branch değiştirirken dikkat edilmesi gereken en önemli konulardan biri kaydedilmemiş dosya değişiklikleridir.

Örneğin feature/login branch üzerinde bir dosyayı değiştirdiniz ancak henüz commit oluşturmadınız.

Bu durumda farklı bir branch'e geçmek istediğinizde Git, bazı koşullarda işlemi engelleyebilir.

Örneğin:

error: Your local changes to the following
files would be overwritten by checkout

Bu hata, branch değiştirme işleminin mevcut değişikliklerinizi etkileyebileceğini gösterir.

Git veri kaybını önlemek amacıyla geçişi durdurabilir.

Bu durumda öncelikle:

git status

Komutuyla çalışma alanınızın durumunu kontrol edin.

Değişiklikleriniz tamamlandıysa bunları uygun bir commit ile kaydedebilirsiniz.

git add .
git commit -m "Devam eden çalışma kaydedildi"

Ancak her değişiklik için hemen commit oluşturmak zorunda değilsiniz.

Geçici olarak saklamak istediğiniz uygun değişiklikler için git stash kullanılabilir.

Git Stash Nedir?

Git stash, çalışma alanındaki belirli kaydedilmemiş değişiklikleri geçici olarak saklamak için kullanılan komuttur.

Örneğin:

git stash push -m "Geçici çalışma"

Bu komut, varsayılan kapsamındaki uygun takip edilen dosya değişikliklerini geçici olarak saklar.

Ardından branch değiştirebilirsiniz.

git switch main

Kaydedilen değişiklikleri daha sonra geri uygulamak için uygun branch üzerinde:

git stash pop

Komutunu kullanabilirsiniz.

Önemli: Varsayılan git stash işlemi, henüz takip edilmeyen yeni dosyaları otomatik olarak dahil etmez.

Takip edilmeyen dosyaları da saklamak gerekiyorsa uygun koşullarda git stash push -u kullanılabilir.

Stash içerisindeki değişiklikler geri uygulanırken de çakışmalar meydana gelebilir.

13. GitHub'a Branch Nasıl Yüklenir?

Bilgisayarımızda oluşturduğumuz branch'i GitHub'a gönderebiliriz.

Bu işlem özellikle takım çalışması ve Pull Request süreçlerinde önemlidir.

Önce aktif branch'imizi kontrol edelim:

git branch --show-current

Beklenen çıktı:

feature/iletisim-sayfasi

Şimdi branch'imizi GitHub'a gönderelim:

git push -u origin feature/iletisim-sayfasi

Bu komutun çalışabilmesi için origin uzak depo bağlantısının yapılandırılmış ve kullanıcının gönderme yetkisine sahip olması gerekir.

Komuttaki bölümlerin anlamları:

  • git push: Yerel commit kayıtlarını uzak depoya gönderir.
  • -u: Yerel branch için upstream bağlantısını yapılandırır.
  • origin: Uzak repository'nin ismidir.
  • feature/iletisim-sayfasi: GitHub'a gönderilecek branch'tir.

İşlem başarılı olduğunda GitHub repository'nizde yeni branch görüntülenebilir.

Bu noktadan sonra aynı branch üzerinde yeni commit oluşturduğunuzda genellikle yalnızca:

git push

Komutunu kullanmanız yeterli olur.

14. GitHub Üzerinde Branch'leri Görüntüleme

GitHub repository sayfasında branch seçimi için kullanılan bir menü bulunur.

Bu menüden repository'nin erişilebilir branch'lerini görüntüleyebilir ve farklı branch'lerdeki dosyaları inceleyebilirsiniz.

Örneğin aşağıdaki branch'lere sahip bir repository düşünelim:

main
feature/iletisim-sayfasi
feature/login
fix/navbar

GitHub arayüzünde feature/iletisim-sayfasi branch'ini seçtiğinizde bu branch'in dosya durumunu görüntüleyebilirsiniz.

Main branch'ine geçtiğinizde ise ana geliştirme hattının dosyalarını görürsünüz.

GitHub üzerinde branch'ler arasında geçiş yapmak, bilgisayarınızdaki aktif yerel branch'i otomatik olarak değiştirmez.

Yerel branch değiştirmek için terminalde git switch kullanmanız gerekir.

15. Git Branch İsimlendirme Kuralları

Git branch isimlerini anlaşılır seçmek, özellikle birden fazla geliştiricinin çalıştığı projelerde önemlidir.

Branch ismi, üzerinde çalışılan görevin amacını mümkün olduğunca açık şekilde ifade etmelidir.

Yaygın kullanılan isimlendirme örnekleri şunlardır:

Branch İsmi Kullanım Amacı
main Ana geliştirme hattı
develop Ekibin tercih ettiği modellerde geliştirme entegrasyonu
feature/login Yeni giriş özelliği geliştirme
feature/payment Ödeme sistemi geliştirme
fix/navbar Menü hatasını düzeltme
hotfix/security Acil güvenlik düzeltmesi
docs/readme-update Dokümantasyon güncelleme
refactor/auth-service Kimlik doğrulama kodunu yeniden düzenleme

Buradaki feature, fix, hotfix ve docs gibi ön ekler Git tarafından zorunlu tutulmaz.

Bunlar ekiplerin işlerini düzenlemek için kullandıkları isimlendirme gelenekleridir.

İyi Branch İsmi Nasıl Olmalıdır?

İyi bir branch ismi kısa, açıklayıcı ve geliştirilen işle ilişkili olmalıdır.

Örneğin:

feature/user-profile

Bu isim yeni kullanıcı profili özelliğinin geliştirildiğini açıkça ifade eder.

Buna karşılık:

yenibranch123

Gibi isimler projenin büyümesiyle birlikte takip edilmesi zor bir yapı oluşturabilir.

Branch isimlerinde boşluk kullanmamak ve ekip içerisinde tutarlı isimlendirme kuralları belirlemek de faydalıdır.

16. Git Branch Nasıl Yeniden Adlandırılır?

Bazen oluşturduğunuz branch ismini değiştirmek isteyebilirsiniz.

Örneğin feature/login-form isminde bir branch oluşturdunuz ancak daha açıklayıcı bir isim kullanmak istiyorsunuz.

Aktif branch'i yeniden adlandırmak için:

git branch -m feature/user-login

Bu komut aktif branch'in ismini feature/user-login olarak değiştirir.

Başka bir yerel branch'in ismini değiştirmek için:

git branch -m eski-isim yeni-isim

Komutunu kullanabilirsiniz.

Ancak branch daha önce GitHub'a gönderildiyse yerel branch ismini değiştirmek, uzak repository'deki branch ismini otomatik olarak değiştirmez.

Bu durumda yeni branch ismini uzak depoya göndermek ve eski uzak branch'i uygun koşullarda kaldırmak için ek işlemler gerekebilir.

Özellikle aktif Pull Request bulunan branch'leri yeniden adlandırmadan önce ekip çalışması ve GitHub bağlantıları üzerindeki etkileri değerlendirilmelidir.

17. Git Branch Nasıl Silinir?

Bir özellik tamamlandıktan ve değişiklikleri uygun şekilde birleştirildikten sonra artık kullanılmayan branch'leri kaldırabilirsiniz.

Yerel branch silmek için en yaygın komut:

git branch -d branch-ismi

Örneğin:

git branch -d feature/login

Bu komut, uygun birleştirme koşullarını sağlayan yerel branch'i siler.

Silmek istediğiniz branch o anda aktifse önce başka bir branch'e geçmeniz gerekir.

Örneğin:

git switch main

git branch -d feature/login

Git, bazı commit kayıtlarının kaybolma ihtimali olduğunda güvenli silme işlemini reddedebilir.

Git Branch -D Nedir?

Git, branch'i zorla silmek için büyük D seçeneğini de sunar.

git branch -D feature/login

Ancak bu komut dikkatli kullanılmalıdır.

Çünkü branch henüz birleştirilmemiş commit kayıtları içeriyor olsa bile silme işlemini gerçekleştirebilir.

Bu nedenle özellikle önemli projelerde branch'i silmeden önce commit geçmişini kontrol etmek gerekir.

Öneri: Yeni başlayanlar için git branch -d kullanmak, git branch -D komutuna göre daha güvenli bir başlangıçtır.

18. GitHub'daki Uzak Branch Nasıl Silinir?

Yerel branch silmek ile GitHub üzerindeki uzak branch'i silmek farklı işlemlerdir.

Yerel branch'i silmek için:

git branch -d feature/login

GitHub üzerindeki uzak branch'i silmek için:

git push origin --delete feature/login

Komutu kullanılabilir.

Bu işlem origin uzak deposundaki feature/login branch'ini kaldırmak için istek gönderir.

İşlemin başarılı olması için gerekli erişim izinlerinin bulunması ve repository kurallarının silme işlemine izin vermesi gerekir.

Örneğin korunan branch'lerin silinmesi GitHub kuralları tarafından engellenebilir.

Önemli: git push origin --delete komutunu kullanmadan önce doğru branch ismini yazdığınızdan emin olun.

19. Git Branch --merged Nedir?

Büyük projelerde zamanla çok sayıda branch oluşabilir.

Artık gerekmeyen branch'leri tespit etmek için Git bazı yardımcı komutlar sunar.

Örneğin:

git branch --merged main

Bu komut, uç commit kayıtları main branch geçmişinden erişilebilir durumda olan yerel branch'leri listeler.

Örnek çıktı:

  feature/login
  fix/navbar
* main

Bu branch'lerdeki çalışmalar main geçmişine dahil edilmiş olabilir.

Ancak bir branch'in bu listede bulunması, o branch'in her koşulda silinmesi gerektiği anlamına gelmez.

Silme kararı verirken projenizin çalışma düzenini de göz önünde bulundurun.

Henüz Birleştirilmemiş Branch'ler

Main branch geçmişine henüz dahil edilmemiş yerel branch'leri görüntülemek için:

git branch --no-merged main

Bu komut özellikle tamamlanmamış çalışmaların takip edilmesinde faydalı olabilir.

20. Git Branch ve Git Merge Arasındaki Fark

Git branch ve git merge birbirleriyle ilişkili ancak farklı amaçlara sahip işlemlerdir.

Git branch, ayrı geliştirme hatları oluşturmak ve yönetmek için kullanılır.

Git merge ise farklı geliştirme hatlarında bulunan commit geçmişlerini birleştirmek için kullanılır.

Örneğin:

A --- B --- C -------- main
             \
              D --- E  feature/login

Feature/login branch üzerinde yaptığımız değişiklikleri ana geliştirme hattına dahil etmek isteyebiliriz.

Bu işlem için uygun koşullarda git merge kullanılabilir.

Ancak birleştirme işleminin sonucunda fast-forward, merge commit veya conflict gibi farklı durumlar oluşabilir.

Bu nedenle merge işlemini ayrı bir eğitim bölümünde ayrıntılı olarak inceleyeceğiz.

Git ve GitHub Eğitim Serisi'nin beşinci bölümünde git merge komutunu ve merge conflict çözümünü uygulamalı olarak öğreneceğiz.

21. Profesyonel Projelerde Branch Yönetimi

Profesyonel yazılım projelerinde branch kullanımı, ekiplerin benimsediği geliştirme modeline göre değişebilir.

Yaygın yaklaşımlardan biri kısa ömürlü feature branch'ler oluşturarak geliştirmeleri ana branch'e düzenli şekilde entegre etmektir.

Diğer bir yaklaşım ise main ve develop gibi farklı entegrasyon branch'leri içeren daha kapsamlı bir iş akışıdır.

Feature Branch Workflow

Feature Branch Workflow, yeni özelliklerin ayrı branch'lerde geliştirilmesini temel alan bir çalışma yaklaşımıdır.

Örneğin:

main
 |
 |--- feature/login
 |
 |--- feature/profile
 |
 |--- feature/payment

Her geliştirici kendi görevi için branch oluşturabilir.

Özellik tamamlandıktan sonra test ve kod inceleme süreçlerinden geçirilerek ana geliştirme hattına dahil edilebilir.

Bu yaklaşım özellikle küçük ve orta ölçekli ekiplerde oldukça kullanışlıdır.

GitFlow Nedir?

GitFlow, farklı geliştirme amaçları için belirli branch türleri kullanan bir Git çalışma modelidir.

Bu yaklaşımda main, develop, feature, release ve hotfix gibi branch türleri bulunabilir.

Örnek:

main
 |
 |--- develop
 |      |
 |      |--- feature/login
 |      |
 |      |--- feature/payment
 |
 |--- hotfix/security

GitFlow, belirli sürüm planlama ihtiyaçlarında yararlı olabilir.

Ancak her proje için zorunlu veya en iyi yöntem değildir.

Özellikle sürekli dağıtım yapan ekipler daha basit ve kısa ömürlü branch yaklaşımlarını tercih edebilir.

Branch Protection Nedir?

GitHub üzerinde önemli branch'leri korumak için branch protection kuralları kullanılabilir.

Bu kurallar, repository yapılandırmasına ve kullanılan GitHub planına bağlı olarak belirli işlemleri sınırlayabilir.

Örneğin:

  • Main branch'e doğrudan değişiklik gönderilmesini sınırlamak.
  • Pull Request incelemesini zorunlu tutmak.
  • Belirli otomatik testlerin başarılı olmasını istemek.
  • Branch silme işlemlerini sınırlandırmak.
  • Force push işlemlerini engellemek.

Bu kuralların amacı, önemli geliştirme hatlarının kontrolsüz değişikliklerden korunmasına yardımcı olmaktır.

22. Git Branch Kullanırken Yapılan Yaygın Hatalar

Hata 1: Branch Oluşturup Geçiş Yapmayı Unutmak

Aşağıdaki komutu çalıştırdığınızda:

git branch feature/login

Yalnızca yeni bir branch oluşturursunuz.

O branch üzerinde çalışmaya başlamak için ayrıca:

git switch feature/login

Komutunu kullanmalısınız.

Alternatif olarak iki işlemi tek komutla gerçekleştirebilirsiniz:

git switch -c feature/login

Hata 2: Branch Already Exists

Aşağıdaki hatayla karşılaşabilirsiniz:

fatal: a branch named 'feature/login'
already exists

Bu hata aynı isimde bir yerel branch'in zaten bulunduğunu gösterir.

Mevcut branch'leri kontrol edin:

git branch

Branch zaten mevcutsa yeni branch oluşturmak yerine doğrudan geçiş yapabilirsiniz:

git switch feature/login

Hata 3: Pathspec Did Not Match

Git checkout kullanırken var olmayan bir branch ismi yazarsanız aşağıdakine benzer bir hata alabilirsiniz:

error: pathspec 'feature/unknown'
did not match any file(s) known to git

Bu durumda branch ismini kontrol edin.

Yerel branch listesini görüntülemek için:

git branch

Git'in bildiği uzak branch referanslarını da görmek için:

git branch -a

Komutunu kullanabilirsiniz.

Hata 4: Kaydedilmemiş Değişikliklerle Branch Değiştirmek

Branch değiştirmeden önce git status komutuyla çalışma alanını kontrol edin.

Kaydedilmemiş değişiklikler bazı durumlarda branch geçişine engel olabilir veya uygun koşullarda yeni branch'e taşınabilir.

Bu nedenle hangi değişikliklerin hangi branch üzerinde bulunduğunu kontrol etmek önemlidir.

Hata 5: Yanlış Branch Üzerinde Commit Oluşturmak

Bazen geliştiriciler feature branch açmayı unutup doğrudan main üzerinde commit oluşturabilir.

Bu durumu önlemek için yeni bir göreve başlamadan önce:

git branch --show-current

Komutuyla aktif branch'i kontrol etmek iyi bir alışkanlıktır.

Yanlış branch üzerinde oluşturulan commit kayıtlarını taşımak veya geri almak için farklı Git yöntemleri bulunur. Ancak geçmişi değiştiren işlemler dikkatli uygulanmalıdır.

23. Git Branch Komutları Hızlı Referans Tablosu

Komut Açıklama
git branch Yerel branch'leri listeler.
git branch -a Yerel ve remote-tracking branch referanslarını listeler.
git branch -r Uzak branch'lere ait yerel takip referanslarını listeler.
git branch --show-current Aktif branch ismini gösterir.
git branch yeni-branch Yeni yerel branch oluşturur.
git switch main Main branch'ine geçer.
git switch -c yeni-branch Yeni branch oluşturur ve geçiş yapar.
git switch - Önceki branch'e geri döner.
git checkout -b yeni-branch Yeni branch oluşturur ve geçiş yapar.
git branch -m yeni-isim Aktif branch'i yeniden adlandırır.
git branch -d branch-ismi Birleştirme koşullarını sağlayan yerel branch'i siler.
git branch -D branch-ismi Yerel branch'i zorla siler.
git branch --merged main Main geçmişine dahil edilmiş yerel branch'leri listeler.
git branch --no-merged main Main geçmişine henüz dahil edilmemiş yerel branch'leri listeler.
git push -u origin branch-ismi Branch'i uzak depoya gönderir ve upstream ayarlar.
git push origin --delete branch-ismi Uzak depodaki branch'i silmek için kullanılır.
git log --oneline --graph --all Branch commit geçmişini grafik biçiminde gösterir.

24. Sık Sorulan Sorular

Git branch nedir?

Git branch, bir Git deposunda ayrı geliştirme hatları oluşturmayı sağlayan commit işaretçisidir. Farklı özellikleri veya hata düzeltmelerini ana geliştirme hattından ayrı yönetmek için kullanılır.

Git branch oluşturunca dosyalar kopyalanır mı?

Hayır. Git, yeni branch oluştururken projenin tamamen bağımsız bir klasör kopyasını meydana getirmez. Branch'ler Git'in commit geçmişindeki referansları aracılığıyla yönetilir.

Git branch ile git switch arasındaki fark nedir?

Git branch, branch'leri listelemek ve yönetmek için kullanılır. Git switch ise aktif branch'i değiştirmek ve uygun seçeneklerle yeni branch oluşturup o branch'e geçmek için kullanılır.

Git checkout hâlâ kullanılabilir mi?

Evet. Git checkout kullanılmaya devam eder. Ancak yalnızca branch değiştirmek için git switch komutunu tercih etmek, işlemin amacını daha açık hale getirebilir.

Main branch silinebilir mi?

Teknik olarak belirli koşullarda branch silmek mümkündür. Ancak varsayılan veya korunan branch'lerde GitHub kuralları silme işlemini sınırlandırabilir. Önemli bir ana branch'i silmek ciddi proje yönetimi sorunlarına neden olabilir.

Bir projede kaç branch oluşturabilirim?

Git çok sayıda branch oluşturmayı destekler. Ancak gereksiz branch'lerin birikmesi proje yönetimini zorlaştırabilir. Bu nedenle branch'leri görevlere uygun şekilde oluşturmak ve tamamlanan çalışmaları düzenli yönetmek önerilir.

GitHub'a branch göndermek için hangi komut kullanılır?

Yeni bir yerel branch'i GitHub'a göndermek ve upstream bağlantısını oluşturmak için genellikle git push -u origin branch-ismi komutu kullanılır.

Branch değiştirdiğimde dosyalarım neden değişiyor?

Git, branch değiştirdiğinizde çalışma klasöründeki dosyaları seçilen branch'in commit durumuna göre güncelleyebilir. Bu nedenle farklı branch'lerde farklı dosya içerikleri bulunabilir.

Git branch silmek commit geçmişini siler mi?

Branch silmek ilgili branch referansını kaldırır. Commit kayıtları başka referanslardan erişilebilir durumdaysa korunur. Ancak erişilemeyen commit kayıtları zaman içerisinde Git tarafından temizlenebilir. Bu nedenle birleştirilmemiş çalışmaları zorla silmek risklidir.

Her yeni özellik için branch oluşturmalı mıyım?

Her değişiklik için ayrı branch oluşturmak zorunlu değildir. Ancak bağımsız özellikler, hata düzeltmeleri ve inceleme gerektiren çalışmalar için ayrı branch kullanmak çoğu projede faydalıdır.

25. Sonuç: Git Branch Yönetimini Öğrendik

Bu rehberde Git branch kavramını, branch'lerin nasıl çalıştığını ve yazılım geliştirme süreçlerinde neden kullanıldığını öğrendik.

Git branch komutuyla yeni dallar oluşturmayı, git switch ile branch değiştirmeyi, git checkout ile eski yöntemleri kullanmayı ve GitHub'a yeni branch göndermeyi uygulamalı olarak gerçekleştirdik.

Ayrıca branch isimlendirme kurallarını, main ve feature branch mantığını, branch silme işlemlerini ve profesyonel yazılım ekiplerinde kullanılan bazı branch yönetimi yaklaşımlarını inceledik.

Git branch kullanmayı öğrenmek, daha düzenli yazılım projeleri geliştirmenin ve ekip çalışmalarına katılmanın önemli adımlarından biridir.

Git ve GitHub Eğitim Serisi - Bölüm 5: Git Merge Nedir? Branch Birleştirme, Merge Conflict ve Çakışma Çözümü.

Bir sonraki bölümde farklı branch'lerde geliştirdiğimiz kodları nasıl birleştireceğimizi ve aynı dosyalarda oluşan çakışmaları nasıl çözebileceğimizi gerçek örnekler üzerinden öğreneceğiz.

Nizokka Akademi üzerindeki Git, GitHub ve yazılım geliştirme eğitimlerini takip ederek teknik becerilerinizi geliştirmeye devam edebilirsiniz.

Kaynaklar ve Ek Okumalar

```

Benzer içerikler

Git ve GitHub

GitHub Pull Request Nedir? Kod İnceleme ve Takım Çalışması Rehberi

GitHub Pull Request nedir, nasıl oluşturulur ve birleştirilir? Bu uygulamalı rehberde feature branch üzerinden Pull Request açmayı, kod incelemeyi, reviewer eklemeyi, değişiklik taleplerini yönetmeyi ve GitHub'da profesyonel takım çalışması yapmayı öğrenin.

İçeriği oku →

Git ve GitHub

Git Clone, Pull ve Fetch Nedir? GitHub Projelerini Güncelleme Rehberi

Git clone, pull ve fetch komutları nasıl kullanılır? GitHub projelerini bilgisayarınıza indirmeyi, uzak depodaki değişiklikleri kontrol etmeyi, yerel branch'leri güncellemeyi ve git pull ile git fetch arasındaki farkları uygulamalı örneklerle öğrenin.

İçeriği oku →

Git ve GitHub

Git Merge Nedir? Branch Birleştirme ve Merge Conflict Çözümü

Git merge nedir ve branch'ler nasıl birleştirilir? Bu kapsamlı rehberde Fast-Forward Merge, Three-Way Merge, Merge Commit ve Merge Conflict kavramlarını öğrenin. Gerçek Git komutlarıyla branch birleştirmeyi, kod çakışmalarını çözmeyi ve hatalı merge işlemlerini güvenle iptal etmeyi keşfedin.

İçeriği oku →

Teknik desteğe mi ihtiyacınız var?

Projenizin kapsamını birlikte değerlendirelim

İletişime geçin