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.