Kurs
Veri boru hattınızda yeni bir özelliği hayata geçirirken acil bir hata bildirimi geldi. Çalışma dizininiz yarım kalmış değişikliklerle dolu. Henüz commit atmaya hazır değilsiniz, ancak hemen dal değiştirmek zorundasınız.
Bu eğitimde, tam git stash komut setini nasıl kullanacağınızı göstereceğim. Git'te değişiklikleri nasıl kaydedeceğinizi, inceleyeceğinizi, geri yükleyeceğinizi, seçmeli olarak saklayacağınızı ve birikmiş stash'leri nasıl temizleyeceğinizi öğreneceksiniz. Daha fazla öğrenmek için GitHub Kavramlarına Giriş kursumuzu almanızı öneririm; sürüm kontrolü ve GitHub üzerindeki depolarla çalışma hakkında daha fazla bilgi edinebilirsiniz.
Git stash Nedir?
git stash, onaylanmamış değişikliklerinizi geçici olarak bir kenara kaldıran bir Git komutudur; böylece bir Git commit oluşturmadan temiz bir çalışma dizinine dönebilirsiniz. Bu, dallar arasında geçiş yapmayı veya acil işleri ilerlemenizi kaybetmeden ele almayı kolaylaştırır.
Stash'ler son giren ilk çıkar (LIFO) yığını olarak saklanır. En son stash her zaman stash@{0}'dır, ardından stash@{1} ve bu şekilde devam eder.
Varsayılan olarak, git stash değiştirilmiş izlenen dosyaları ve indeksdeki aşamaya alınmış (staged) değişiklikleri kaydeder. Ancak yeni izlenmeyen dosyalar ile .gitignore içindekiler gibi yok sayılan dosyaları içermez.
git stash ile Değişiklikler Nasıl Kaydedilir
Bu bölümde, değişiklikleri saklamanın üç yaygın yolunu göstereceğim. Tutarlı bir senaryo kullanacağız: data_pipeline.py, config.yaml ve tests/test_pipeline.py dosyalarının bulunduğu bir veri boru hattı projesi üzerinde çalıştığınızı varsayın.
İzlenen değişiklikleri saklayın
git stash değiştirilmiş veya aşamaya alınmış değişiklikleri kaydettiğinden, çalışma dizininizdeki dosyaların durumunu kontrol etmek için git status çalıştırın. git stash komutunu çalıştırdıktan sonra, hem staged hem de staged olmayan izlenen değişiklikler kaydedilir ve sizi temiz bir çalışma diziniyle baş başa bırakır.

İzlenmeyen değişiklikleri ve yeni dosyaları dahil edin
Varsayılan olarak, git stash depoya hiç eklenmemiş dosyaları yok sayar. Yeni bir test dosyası oluşturduysanız, standart bir stash onu dizininizde bırakır; bu da dallar arasında geçiş yaparken sorunlara yol açabilir.

git stash çalıştırırsanız, o dosya kalacaktır. Onu dahil etmek için -u veya --include-untracked komutunu kullanın:
git stash -u

.gitignore tarafından açıkça yok sayılanlar da dahil tüm dosyaları dahil etmek için git stash --all veya -a kullanabilirsiniz. Ancak dikkatli olmalısınız; bu, istemeden günlükler veya derleme çıktıları gibi dosyaları da süpürebilir.
Stash'inize ad verin
git stash kullanırken, WIP on main gibi varsayılan iletiler birden fazla stash'iniz varsa kafa karıştırıcı olabilir. Bu sorunu önlemek için, stash'leri göndermek istediğinizde her zaman açıklayıcı bir mesaj ekleyin.
git stash push -m "refactor pipeline config handling."
Stash listesini görüntülemek ve karşılaştırmak için git stash list komutunu kullanabilirsiniz. Adlandırılmış stash ile varsayılan stash'ler arasındaki farka dikkat edin.

Açık iletiler kullanmak, özellikle birden çok işle uğraşırken veya bir ekiple çalışırken daha sonra doğru stash'i tanımlamayı çok daha kolay hale getirir.
Sürüm kontrolünü temelden ileri iş akışlarına kadar, değişikliklerin izlenmesi, depoların yönetilmesi ve verimli iş birliği gibi konuları öğrenmek için GitHub Foundations ve Git Fundamentals yetkinlik yollarımızı denemenizi öneririm.
Stash'lerinizi Nasıl Görüntüler ve İncelersiniz
Bir stash'i körlemesine uygulamadan önce içinde ne olduğunu doğrulamak önemlidir. Bu adım genellikle atlanır, ancak kafa karışıklığını veya yanlışlıkla üzerine yazmayı önlemeye yardımcı olur.
git stash list: Tüm stash'leri listeleyin
Stash yığınızı görmek için aşağıdaki komutu kullanın:
git stash list

Artık stash'lerin LIFO (son giren ilk çıkar) sırasını izlediğini biliyor olmalısınız. En güncel stash her zaman stash@{0}'dır ve her yeni stash eskileri yığının daha aşağısına iter.
git stash show: Uygulamadan önce bir stash'i inceleyin
Bir stash'teki değişikliklerin hızlı bir özetini almak için belirli bir stash üzerinde show komutunu kullanabilirsiniz. Örneğin, aşağıdaki komut en son stash'te yapılan değişiklikleri gösterir:
git stash show stash@{0}

Gerçek kod değişikliklerini (tam diff) görmek için, o stash'te saklanan satır satır tüm değişiklikleri göstermek üzere aşağıdaki komutu kullanın.
git stash show -p stash@{0}

En iyi uygulama olarak, özellikle birkaç günlükse veya içinde ne olduğundan emin değilseniz, bir stash'i uygulamadan önce her zaman inceleyin.
Saklanan Değişiklikler Nasıl Geri Yüklenir
Çalışmanızı git stash ile kaydettikten sonra onu geri getirmek için bir yola ihtiyacınız olacak. İkisi de belirli bir stash'i indeksine göre hedeflemeyi içeren iki ana geri yükleme yöntemi vardır.
git stash pop: uygula ve kaldır
Bu, bir stash'i geri yüklemenin en yaygın yoludur. En üstteki stash'i (stash@{0}) alır, değişiklikleri mevcut dalınıza uygular ve ardından bu stash'i yığından siler.
git stash pop

pop komutunu çalıştırdıktan sonra değişiklikleriniz geri yüklenir ve stash kaldırılır. Bu nedenle, o kaydedilmiş durumla işinizin bittiğinden emin olduğunuzda ve stash listenizi düzenli tutmak istediğinizde pop kullanın.
pop komutunu daha derinlemesine anlamak için, depodaki dalları değiştirirken onaylanmamış çalışmaları nasıl kaydedeceğinizi öğrenmek üzere Git Stash Pop eğitimimize göz atmanızı öneririm.
git stash apply: uygula ve sakla
Değişiklikleri geri yüklemek, ancak stash'i yeniden kullanmak üzere saklamak istiyorsanız, aşağıdaki gibi apply komutunu kullanın:
git stash apply stash@{1}

Bir stash'i stash@{1} indeksiyle referans göstermek, geri yükleme için belirli stash'i hedefler. Bu yöntem, aynı değişiklikleri birden fazla dala uygulamak istediğinizde yararlıdır; örneğin hem main hem de staging dallarına gitmesi gereken paylaşılan bir yapılandırma ayarı gibi.
apply komutunu kullandıktan sonra stash'in hâlâ orada olup olmadığını doğrulamak için git stash list kullanabilirsiniz.

Seçmeli Olarak Nasıl Stash Yapılır
Gerçek dünya projelerinde değişiklikleriniz sıklıkla birbirine karışır. Böyle durumlarda, yalnızca işinizin bir kısmını saklamak, geri kalanını ise erişilebilir tutmak isteyebilirsiniz. Git, ince ayarlı kontrol için iki yöntem sunar.
git stash push -m: Belirli dosyaları saklayın
Hangi dosyaların rafa kaldırılması gerektiğini tam olarak biliyorsanız, yollarını belirterek yalnızca seçili dosyaları saklayabilirsiniz:
Örneğin, aşağıdaki komut yalnızca data_pipeline.py dosyasını saklar. Bu, bir hata düzeltmesini aşamaya alınmış ve commit'e hazır tutarken, deneysellik içeren bir çalışmayı duraklatmak istediğinizde kullanışlıdır.
git stash push -m "stash experimental pipeline logic" data_pipeline.py
Komutunuzun başarıyla yürütülüp yürütülmediğini kontrol etmek için, deponuzun önceki ve sonraki hâlini göstermek üzere git status kullanın.

git stash push -p -m: Belirli parçalara (hunk) etkileşimli olarak stash yapın
Bazen aynı dosyada “iyi” kod ve “WIP” kod bulunabilir. Bu durumda, etkileşimli bir oturum başlatmak için -p veya --patch bayrağını kullanın. Bu, bir dosya içindeki belirli değişiklik parçalarını (“hunk”) seçmenizi sağlar.
git stash push -p -m "Selective stash of pipeline logic"

“Bu hunk'ı sakla” çıktısını aşağıdaki seçeneklerle göreceksiniz:
-
y: Evet, bu hunk'ı sakla -
n: Hayır, bu hunk'ı atla -
q: Çık; bu hunk'ı veya kalanları saklama. -
a: Tümü; bu hunk'ı ve dosyadaki sonraki tüm hunk'ları sakla. -
d: Sil; bu hunk'ı veya dosyadaki sonraki hunk'ları saklama. -
?: yardım
Bu iş akışının git add -p ile çok benzer olduğunu not etmelisiniz. Aynı dosya içindeki değişiklikler ilişkisiz olduğunda ve ayrı ayrı ele alınması gerektiğinde kullanışlıdır.
Stash'inizi Nasıl Temizlersiniz
Stash'ler kısa ömürlü olmak üzere tasarlanmıştır. Birikmelerine izin verirseniz, daha sonra doğru olanı bulmak zorlaşır ve nihayet uyguladığınızda çakışma riskini artırır.
git stash drop: Belirli bir stash'i düşürün
Tek bir stash'i kaldırmak için indeksini belirterek git stash drop kullanın. Örneğin, aşağıdaki komut listedeki 4. stash'i düşürür.
git stash drop stash@{3}

Yukarıdaki örnekte, listenin küçüldüğünü ve düşürme işleminden sonra kalan stash'lerin yeniden indekslendiğini görebilirsiniz.
git stash clear: Tüm stash'leri temizleyin
Tüm stash'leri bir kerede kaldırmak için şunu kullanın:
git stash clear
Bu komut başarıyla çalıştığında çıktı üretmez; git stash list çalıştırarak doğrulayabilirsiniz.

git stash clear kullanırken ekstra dikkatli olmanızı öneririm; bu işlem kalıcıdır ve yerleşik bir geri alma yoktur. Yalnızca saklanan hiçbir çalışmaya artık ihtiyacınız olmadığından emin olduğunuzda çalıştırın.
git stash branch: Bir stash'i dala dönüştürün
Mevcut dalınız, stash'i oluşturduğunuzdan bu yana önemli ölçüde ayrıştıysa, onu uygulamak birleştirme çakışmalarına yol açabilir. Bu durumda, doğrudan stash'ten yeni bir dal oluşturabilirsiniz:
git stash branch pipeline-fix stash@{1}

Yukarıdaki komut şunları yapar:
- Stash'in yapıldığı orijinal commit'ten yeni bir dal oluşturur
- Stash'i uygular
- Onu stash listesinden kaldırır
Daha iyi geliştirme ve iş birliği için dalları yönetme hakkında daha fazla bilgi edinmek üzere Git Branch eğitimimize göz atmanızı öneririm.
Bilinmeye Değer Diğer Git Stash Komutları
Yaygın iş akışlarının ötesinde, aşağıdakiler farkında olmanız gereken bazı gelişmiş git stash komutlarıdır:
-
git stash create: Stash listesine eklemeden bir stash nesnesi oluşturur -
git stash store: create ile oluşturulmuş bir stash'i depolar -
git stash export: Bir stash'i bir referansa aktarır veya yazdırır -
git stash import: Mevcut bir commit'ten bir stash içe aktarır
Yaygın Hatalar ve Nasıl Düzeltilir
git stash basit olmasına rağmen, birkaç yaygın sorun sizi tökezletebilir. Karşılaştığım hatalardan bazıları ve bunları nasıl hızlıca tanıyıp düzelteceğiniz burada.
Kaydedilecek yerel değişiklik yok
Bu, en sık görülen “hata olmayan” hatadır. git stash komutunu, izlenen dosyalarda değiştirilmiş veya aşamaya alınmış bir şeyin olmadığı temiz bir çalışma dizininde çalıştırdığınızda oluşur.
Bu sorunu düzeltmek için git status çalıştırın; bir şey görünmüyorsa saklanacak bir şey yoktur.

Bir stash'i uygularken çakışma
Çakışmalar, bulunduğunuz dalın, stash'inizdeki kodun aynı satırlarını değiştirmiş olması durumunda meydana gelir. Örneğin, dosyayı değiştirdikten sonra yeni dalda git stash pop çalıştırdığınızda, muhtemelen bir hata mesajı alırsınız:

Ardından dosya içinde çakışma işaretçilerini görebilirsiniz:

Bu sorunu düzeltmek için aşağıdakilerden herhangi birini yapabilirsiniz:
- Çakışmaları dosyada elle çözün
- Çözülen dosyaları aşamaya alın
git add data_pipeline.py
- Çakışmada otomatik olarak kaldırılmıyorsa
git stash dropkullanarak stash'i elle düşürün
Çakışmalar çok karmaşıksa, bunun yerine değişiklikleri temiz bir zemine uygulamak için aşağıdaki komutu kullanın.
git stash branch recovery-branch stash@{0}
İstemeden dosyaları saklamak
Bazen çalışma dizininizi kontrol etmeden git stash çalıştırabilir ve daha sonra aslında commit etmek istediğiniz bir düzeltmeyi gömdüğünüzü fark edebilirsiniz.
Böyle hatalardan kaçınmak için, saklanacak dosyaları her zaman açıkça belirtin. Örneğin, aşağıdaki komut çalışma dizinindeki her şey yerine yalnızca data_pipeline.py dosyasını saklayacaktır.
git stash push data_pipeline.py
Ayrıca, tüm dosyaları değil, dosyalar içindeki değişikliklerin belirli kısımlarını seçerek saklamanıza olanak tanıyan etkileşimli (patch) modu çalıştırmak için git stash -p kullanabilirsiniz.
Önleyici bir önlem olarak, stash yapmadan önce her zaman git status kontrol edin.
Sonuç
Genel bir kural olarak, stash'leri kısa ömürlü tutun ve her zaman açıklayıcı iletiler kullanın. Çalışmaya bir gün içinde dönmeyecekseniz, bir WIP dalı oluşturmak daha güvenlidir; çünkü uzak depoya itilebilir ve kaybolmaz.
Daha güçlü Git becerileri geliştirmek için Orta Seviye Git kursumuzu almanızı öneririm; Git'te iş birliğini öğrenin. Ayrıca, büyük projelerde Git ile çalışma ve veri boru hattı geliştirmede karmaşık sürüm kontrol senaryoları ve sorunlarını ele alma konularını öğrenmek için İleri Seviye Git kursumuzu da öneririm.
Git Stash SSS
git stash izlenmeyen dosyaları kaydeder mi?
Hayır, varsayılan olarak, git stash yalnızca izlenen dosyaları kaydeder. İzlenmeyen dosyaları dahil etmek için git stash -u kullanın.
git stash commit geçmişimi etkiler mi?
Hayır, stash'ler commit geçmişinizden ayrıdır ve dal günlüklerinizde görünmez.
git stash pop ile git stash apply arasındaki fark nedir?
git stash pop stash'i uygular ve kaldırır; git stash apply ise stash'i uygular ancak stash listesinde tutar.
Git neden “Kaydedilecek yerel değişiklik yok” diyor?
Bu sorun, çalışma dizininiz temiz olduğunda; stash'lenecek değiştirilmiş veya aşamaya alınmış izlenen dosya bulunmadığında ortaya çıkar.
Bir stash'i geri yüklerken çakışmalara ne sebep olur?
Çakışmalar, hem mevcut dalınızda hem de stash'lenmiş değişikliklerde dosyaların aynı bölümlerinin değiştirilmiş olması durumunda meydana gelir.

