git dersleri

Git Stash ile Değişiklikleri Saklayın

Merhaba, bu dersimizde git’in geliştirme yaparken kullanılan özelliklerinden biri olan git stash’i göreceğiz. Git stash, değişiklikleri commit’lemeden yerel depoya kaydetmeyi sağlayan bir araçtır.

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. Diğer bir senaryo siz odaklanmış branch’te çalışırken çok kritik bir hata aldınız ve hemen master’a dönüp o hatayı düzeltmeniz gerekiyor.

Bu durumda hemen o branch’te artık ne yaptıysanız onu commit’leyip gitmeniz gereken branch’e geçebilirsiniz. Fakat git’in bize sunuduğu stash’i de kullanabiliriz.

Chapter 9

Bildiğiniz gibi ‘half-life-2’ projemizde sıradaki bölümümüz 9’un hikayesini yazmaya başlayalım. chapter-9 adlı bir branch oluşturup aşağıdaki satırları ekleyelim ve commit’leyelim.

Siz ekip arkadaşlarınıza ve patronunuza ‘chapter 9’ u eklediğinizi ve branch adını belirttiniz. Bir sonraki işiniz 10. bölümü yazmaya başladınız. Ama henüz bitirmediniz yani commit’e henüz hazır değil.

Tam da o anda patronunuz veya ekip arkadaşınız geldi ve ‘9. bölüm ile ilgili sorular var. Ekip şu an üzerinde çalışıyor, ona dönüp tekrar bakar mısın? Durum biraz acil.’ dedi.

Burada chapter-9 branch’ine dönemeyiz. story.txt dosyasını değiştirdik. Yapabileceğimiz birden fazla seçenek var. Örneğin son yaptığımız işi commit’leyip mesajına birşeyler yazıp daha sonra 9. bölüm ile işimiz bittiğinde geri dönüp bu commit’i geri alıp üzerinde devam edebiliriz. (İlerleyen derslerimizde bunu göreceğiz.) Diğer bir yöntem git stash kullanabiliriz.

Git Stash

En hızlı çözüm olarak git stash komutunu parametresiz olarak kullanabiliriz.

Yaptığımız değişiklikler bir anda gitti. Git stash yaptığımız değişiklikleri farklı bir şekilde kaydederek projedeki değişiklikleri de geri aldı. Bu sayede chapter-9‘a geri dönebildik. Şimdi bu branch’te istenilen değişiklikleri de yapıp chapter-10‘a yani uğraştığımız asıl işe geri dönelim. Aşağıdaki paragrafı chapter-9 da story.txt dosyasına ekliyoruz.

Not: git stash komutunu git stash push olarak da kullanabilirsiniz.

Git Stash Pop

‘chapter-9’ ile işimiz bittiğine göre ‘chapter-10’ daki işimize devam edelim. chapter-10branch’ine geçtiğimizde ve git stash pop komutunu kullanalım.

Gördüğünüz gibi yaptığımız değişiklikler geri geldi ve artık üzerinde çalışabiliriz.

Git Stash Çalışma Prensibi

Anlayacağınız gibi git stash aslında stack yapısına sahiptir. Kaydederken git stash push ve geri alırken git stash pop komutunu kullandık. Push işleminde yaptığımız değişikliği en üstte koyarken, pop işleminde en üstteki değişikliği alıp uygular ve stash deki ilgili kayıt silinir. Yani pop işleminden sonra aynı işlemi tekrar yapamazsınız.

Mesaj Girmek

git stash push yaparken mesaj da verebilirsiniz. Bu sayede geri döndüğünüzde kendinize bir not eklemiş olursunuz. Şimdi dosyayı biraz daha düzenleyip tekrar stash’e kaydedelim. Yapacağımız değişiklikten sonra 10. bölüm aşağıdaki şekilde olacaktır.

Değişiklikleri görme

Burda bir komut daha görüyoruz. git stash list bize stash’e kaydedilmiş değişiklikleri listeliyor. Şimdi git stash show <stash-id> komutu ile ne kaydedildiğini görelim.

git stash apply

Aynı şekilde git stash pop yerine git stash apply <stash-id> komutunu da kullanabilirsiniz. Aradaki tek fark pop stash’deki değişikliği silerken apply sadece değişikliği uygular ama stash’deki kayıt kalmaya devam eder.

git stash branch

Stash, branch’ten bağımsız bir şekilde çalışır. Örneğin chapter-10 branch’ini yanlışlıkla silseniz dahi farklı bir branch’e uygulayabilir ya da yeni bir branch oluşturup bu branch üzerinden devam edebilirsiniz. Şimdi ‘yanlışlıkla’ chapter-10 branchini silip git stash branch <stash-id> ile yeni bir branch’e geçelim. Bu arada stash id tanımlamazsanız en sondaki stash kullanılır.

Bu şekilde istediğimiz değişikliği istediğimiz bir branch’e geçerek devam edebiliriz.

Drop ve Clear

Stash listesini temiz tutmak oldukça önemlidir. Eğer sizin için önemsiz değişiklik varsa bunu git stash drop <stash-id> ile silebilir ya da tamamını silmek isterseniz git stash clear komutunu kullanabilirsiniz.

Şimdi değişikliğimizi commit’leyip stash’i temizleyelim.

Notlar

Stash’i öğrendikten sonra kişisel olarak düşüncelerimi de belirtmek istedim. Ben genellikle stash kullanmaktan kaçınıyorum. Bunun sebebi çok fazla stash kullanıldığında stash listesi bir karmaşa haline geliyor. Genellikle hızlıca branch geçişlerinde veya pull işlemlerinde hemen git stash sonra git pull ve ardından git stash popkomutlarını kullanıyorum. Eğer stash’i sürekli kullanıyorsanız mutlaka mesajla birlikte kaydedin. Sürekli stash listenizi temiz tutmaya çalışın. Eğer stash’i sürekli olarak kullanıyorsanız mutlaka mesajla birlikte kullanın. Bu sayede en azından değişikliğin ne olduğuna dair size ipucu vermiş olur.

Bir diğer durum da eğer yerel deponuzu bir şekilde kaybederseniz stash’lere de depo ile beraber veda etmiş olursunuz. Çok önemli bir projede çok önemli bir özellik geliştiriyorsanız bu değişiklikleri stash’de tutmak ölümcül olabilir. Bir gün sonra bilgisayarınızın diski yanmış halde bulabilirsiniz. O yüzden branch’te yeni bir commit oluşturup bunu da uzak depoya mutlaka gönderiyorum. Sonraki gün o commit’i geri alıp üzerinde çalışmaya devam ediyorum. Şu ana kadar görmedik ama bu konuları da işleyeceğiz. Hatta git ile nasıl verimli çalışacağınıza dair ipuçlarımız da olacak.

Bölüm Sonu

Bu dersimizde git’in özelliklerinden biri olan git stash‘i inceledik. Böylece git derslerimizin ilk bölümünü yani Git 101 derslerini tamamlamış olduk. Bir sonraki bölümde ise daha ileri seviye Git konularına değineceğiz. Eğer derslerimizi buraya kadar takip ettiyseniz her projenizde mutlaka git kullanın. Diğer bir tavsiyem git’e hakim olana kadar da komut satırından kullanmaya devam edin. Günümüzde birçok UI sunan git araçları var. IDE’ler bunların en başında gelir. Conflict çözmek dışında bu tür araçları kullanmanızı tavsiye etmiyoruz. Bu sayede git’e daha kolay hakim olursunuz hem de komut satırından çoğu işlemi yapmanın daha kolay olduğunu anlarsınız.

Konu hakkında görüş ve sorularınızı yorum kısmından veya Soru & Cevap sitemizden sorabilirsiniz.

Bir sonraki derslerde görüşmek üzere…

Git derslerinin tamamı için tıklayınız.

15

Ömer Özkan

Genelde Java teknolojileri ile geliştirme yapar. Özgür ve açık kaynak yazılımlara meraklıdır. Boş zamanlarında gönüllü eğitimler verir. Onun için Clean Code, Test Driven Development gibi konular oldukça önemlidir.

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?