Git Branch, Stash & Geriye Dönme

Sena Çelik
Oyun ve Uygulama Akademisi
4 min readMar 27, 2022

Bu yazım, BTK Akademi’de yayınlanan Atıl Samancıoğlu tarafından verilen Versiyon Kontrolleri: Git & GitHub eğitimi sonucunda oluşturmaya başladığım notların devamıdır.

Branch nedir?

Branch, dallanma anlamına gelir. Projede belli bir noktadan sonra ana yapısı dışında başka bir dalda çalışmak isteyebiliriz ya da aynı anda aynı projenin farklı kişiler tarafından çaışabiliriz.

Bir repository oluşturduğumuzda Git varsayılan olarak master isminde bir branch oluşturur ve bu branch projenin ana dalıdır.

HEAD nedir?

Branch — yani dallar — açıktıkça HEAD değişebilir. Branchler arasında yer değiştirebiliriz. Nerede, hangi konumda olduğumuzu ve güncel konumumuzu gösterir.

‘git branch’

Güncel branchleri(dalları) gösterir. Bu komut, geçerli depodaki tüm yerel dalları listeler.

‘git branch [branch adı]’

Bu komutla, yeni bir branch oluşturuz.

‘git switch [branch adı]’

Bu komut, bir daldan diğerine geçmek için kullanılır.

‘git merge [branch adı]’

Git’de merge işlemi başka bir branch’deki değişiklikleri üzerinde çalıştığınız kendi branch’inize entegre etme işlemidir. Git merge işlemi sırasında değişikliklerin çoğunu sizin için otomatik olarak entegre eder.

Merge Conflict Nedir?

Bazı durumlarda Git merge işlemini otomatik olarak gerçekleştiremez ve sizin müdahale ederek hangi değişikliğin nasıl entegre edileceğine karar vermeniz gerekir. Bu durum genellikle aynı dosya üzerinde değişiklikler yapıldığında ortaya çıkar, bu durumda bile Git dosyadaki değişiklikleri nasıl entegre edileceğine çoğu zaman otomatik karar verebilir. Fakat aynı satırda yapılan değişiklikler veya takımdaki bir kişinin bir satırı silmesi durumunda sizin bu değişikliği kendi branch’inize nasıl entegre edileceğine karar vermeniz gerekir.

Bu durumda Git dosyanızı merge conflicted (çakışmalı) olarak işaretler ve sizin çalışmanıza devam edebilmeniz için bu çakışmayı çözmeniz gerekir.

Git Stash Nedir?

Yarım kalan işleri commit etmeyi tercih etmemeliyiz. Commit, bir save point noktadır. Fakat bazen commit etmeden başka bir branchte çalışmanız gerekebilir. Örneğin; Kendinize bir iş seçtiniz, bir branch oluşturdunuz ve o işe odaklandınız. O arada takımdan bir arkadaşınız geldi ve sizden başka branch’teki bir koda bakmanızı istedi. Ya da acil gitmesi gereken bir işi bitirip sizin de o kodu gözden geçirmenizi ve onay vermenizi istedi.

Yarım kalan işinizin hem kaybolmamasını istiyorsunuz hemde commit etmeden bir yerde depolanmasını… Bu gibi durumlarda yeni sorun ile ilgilenmeye başlamak için önceki değişikliklerinizi kaybetmeden yeni ve temiz bir branch oluşturmalısınız. Yarım kalan değişiklikleri kayıt altına almak için “git stash” komutunu kullanmalısınız.

Stash, stack yapısına benzer.

“git stash”: Git stash, değişiklikleri commit’lemeden yerel depoya kaydetmeyi sağlayan bir araçtır.

git stash pop komutu ile listenin en üstünde yer alan değişiklik geri yükler ve bu değişiklik listeden silinir.

git stash apply komutu ile istediğiniz değişikliği geri yükleyebilirsiniz. Ancak bu işlem sonrasında yüklediğiniz değişiklik listeden silinmez.

git stash list komutunu kullanarak aktif branch’inizde geçici olarak kayıt altına aldığınız değişikliklerin listelenmesini sağlayabilirsiniz.

Geçmişe Dönme

Commit attıktan sonra önceki save point noktalarına dönmemiz gerekebilir. Bu nedenle kullanabileceğimiz git komutları mevcuttur.

‘git log’ ile commitlerimizin Hashlerine(idlerine) ulaşabiliriz.

‘git checkout [commitHash]’

git deposunda başka bir yere gitmemizi sağlar.

‘git reset [commitHash] ’

Kayıt etmiş olduğumuz commitleri isteğimize göre siler. Fakat dosya içerisinde değişiklik yapmaz. Loglar da tutulur.

‘git reset --hard [commitHash]”

Kayıt etmiş olduğumuz commitleri isteğimize göre siler. Hatta dosya içerisinde değişiklikleri de siler.

‘git revert [commitHash]’

Commit ettiğiniz herhangi bir değişikliği geri almak için kullanılır. Bu komut ile commit işleminizin kendisi veya bilgileri silinmez sadece commit işleminizdeki değişiklik geri alınır. Örneğin eklediğiniz bir satırı kaldırmak isterseniz git revert komutu ile bunu yapabilirsiniz.

‘git dif’

Commitler de brancler de yada dosyalarda ki farklılıkları bize gösterir. Bu komutu yaptığınız değişiklikleri yada yeni eklediğiniz kodu size gösterir. Yani değişikleri görmemize yarayan komuttur.

‘git rebase’

Doğru kullanılması gereken bir komuttur. Ne olduğunu bilmekte fayda vardır.

“git rebase master” komutu kullandığımızda ise ile A dalındaki her bir commit B dalına sanki commit işlemi B dalında yapılmış gibi yeniden yazılır. Bu sayede B dalının commit tarihçesi sanki tüm değişiklikler bu dalda olmuş gibi düz ve kesintisiz görünü oluşur. Bir ip gibi dizer. Tarihi tekrar yazmak için ya da logları temizlemek için kullanılabilir. Yinede kullanmak için iki kez düşünmekte fayda vardır.

Bu konuyla ilgili diğer yazılarım:

--

--