- Published on
Git Branch Nedir ve Nasil Kullanilir ?
- Authors
- Name
- Alperen Önal
- Git'de branch(dal) kavramı, projedeki farklı çalışma hatlarının oluşturulması ve yönetilmesine olanak sağlar.
- Her branch, projenin farklı bir çalışma hattını veya çalışma sürecini temsil eder.
- Bu konunun anlaşılabilmesi için commit, working directory, staging area, repository gibi temel konularının bilinmesi gereklidir.
- Genelde, farklı kişilerin aynı repo üzerinde çalıştığı durumlarda her geliştirici, ayrı bir branch oluşturarak çalışmasını ana branch ile birleştirmeyi hedefler. Bu, geliştiricilerin birbirlerinin commit'lerini bozmasını büyük ölçüde engeller ve/veya risksiz olarak deneysel çalışmalar yapabilmelerini sağlar.
Git'de HEAD Kavramı Nedir ?
HEAD, bulunulan branch' işaret eden pointer'dir.
Repo'nuzun bulunduğu dizindeki .git klasörünün içine girerek HEAD dosasının içeriğini okuduğunuz zaman, işaret edilen branch'ı(bulunduğunuz branch) görebilirsiniz.
Örneğin : Yeni bir repo oluşturdum ve "inital commit" isimli ve "86d8f42" hash'i olan ilk commit'imi attıktan sonra .git/HEAD içerisinde girdiğimde "ref: refs/heads/master" bu yazı ile karşılaştım. Yani şuanda master branch'indeyim.
Bunu gösterecek olursak :

86d8f42
: Bu, ilgili commit'in SHA-1 hash'ini temsil eder. Her bir commit için benzersizdir ve Git'in her bir commit'i ayırt etmesini sağlar.
Git Branch Komutları Nedir ?
git branch
Halihazırda bulunan branch'ların ismini verir.
git branch yeni_branch_adi
Yeni bir branch oluşturur.
git checkout hedef_branch_adi
Adi verilen hedef branch'a geçiş yapar.(HEAD işaretçisini hedef branch'a işaret edecek şekilde ayarlama yapar.)
git branch -d silinecek_branch_adi
veya
git branch --delete silinecek_branch_adi
Adı verilen branch'i siler.
git branch -D silinecek_branch_adi
veya
git branch --delete --force silinecek_branch_adi
Adı verilen branch'i uyarıları göz ardı ederek siler.(Eğer branch'ınızı merge etmediyseniz muhtemelen uyarı verecek ve bu işlem için force bayragını kullanmanızı isteyecektir.)
git branch -m eski_branch_adi yeni_branch_adi
Bir branch'ın ismini günceller.(Hatırlatma : Github'da kök branch için "main" ismi kullanılırken git'de "master" kullanılmaktadır. Bu yüzden yereldeki bir çalışmamızı github'da yeni açtığımız bir repo'ya push ederken yerelde "git branch -M main" yazarak kök branch'in adını güncelleriz ve ardından push işlemine geçeriz.)
git branch -r
Uzaktaki branch'leri listeler.
git branch -a
Tüm local ve uzak branch'leri listeler.
git merge yeni_feature
Branch'lari birleştirir.(Bu başka videonun konusu :) )
Git Branch Örnek Uygulama
Güncel Durum :
- 86d8f42 numaralı "initial commit"im var. Ve bu commit'in içerisinde alinacaklarlistesi.txt metini var.

alinacaklarlistesi.txt içeriği :

- Şuanda HEAD'ımız master branch'ı üzerinde. (HEAD -> master)

Yapmak istediğimiz :
- alinacaklarlistesi.txt içerisine 2 tane el feneri, 1 tane telsiz, 1tane uyku tulumu eklemesi yap.
- Master branch üzerinde "alinacaklar listesine ekleme yap" isimli bir commit oluşturarak bu değişiklikleri commit et.
- "alinacaklar listesine ekleme yap" isimli commit'in oradan yeni bir branch oluştur. İsmi alpereninlistesi yap. Ardından bu branch'a geç.
- alinacaklarlistesi.txt'ye 1 tane battaniye 1 tane yastık ekle ve bu değişiklikleri "alperenin listesini ekle" başlığı ile commit et.
- Master branch'ına geri dön ve alinacaklarlistesi.txt içerisine bak ardından mevcut tüm branch'ları ve HEAD'ın nereye işaret ettiğini öğren.
- "alpereninlistesi" isimli branch'ı sil.
Adım Adım Yapalım
1-) alinacaklarlistesi.txt içerisine 2 tane el feneri, 1 tane telsiz, 1tane uyku tulumu eklemesi yap.

2-)Master branch üzerinde "alinacaklar listesine ekleme yap" isimli bir commit oluşturarak bu değişiklikleri commit et.



3-)"alinacaklar listesine ekleme yap" isimli commit'in bulunduğu noktadan yeni bir branch oluştur. İsmi alpereninlistesi yap. Ardından bu branch'a geç.


4-)alinacaklarlistesi.txt'ye 1 tane battaniye 1 tane yastık ekle ve bu değişiklikleri "alperenin listesini ekle" başlığı ile commit et.



5-)Master branch'ına geri dön ve alinacaklarlistesi.txt içerisine bak ardından mevcut tüm branch'ları ve HEAD'ın nereye işaret ettiğini öğren.


6-)"alpereninlistesi" isimli branch'ı sil.

