Git Stash ile Değişiklikleri Saklamak
Bir özellik üzerinde çalışıyorsun. Dosyalar yarım, testler kırmızı. Tam o anda "şu hatayı acil düzeltir misin?" mesajı geliyor. Yarım işi commit etmek istemezsin, silmek de istemezsin. İşte git stash tam bu boşluğu doldurur: değişikliklerini bir kenara alır, çalışma dizinini temizler, sonra istediğin anda geri koyar.
Aşağıdaki adımları kendi bir test deposunda uygulaman en iyisi. Boş bir klasör aç, git init yap, iki üç dosya oluştur ve komutları sırayla dene. Terminalde rahat değilsen Linux terminali için hazırladığımız başlangıç rehberi iyi bir ısınma olur.
Değişiklikleri Saklamak: Temel Adımlar
Stash, bir yığın (stack) gibi çalışır. En son sakladığın en üstte durur. Her kayıt stash@{0}, stash@{1} şeklinde numaralanır ve yeni kayıt geldiğinde numaralar kayar.
İlk stash'i oluşturmak
- git stash — takip edilen dosyalardaki tüm değişiklikleri saklar, dizini son commit haline döndürür.
- git stash push -m "yarım login formu" — açıklama yazarak saklar. Bunu alışkanlık yap; üç gün sonra "stash@{2} neydi?" diye düşünmezsin.
- git stash push src/form.js src/api.js — sadece belirttiğin dosyaları saklar. Geri kalan değişiklikler yerinde kalır.
- git stash push -p — parça parça sorar. "Bu hunk saklansın mı?" diye tek tek onaylarsın. Bir dosyanın yarısını saklamak istediğinde çok işe yarar.
Saklama işleminden sonra git status temiz görünür. Artık branch değiştirebilir, pull yapabilir, acil düzeltmeyi rahatça yazabilirsin.
Neler saklanır, neler saklanmaz
Varsayılan davranış çok net değildir ve burada insanlar iş kaybeder:
- Takip edilen (daha önce commit'lenmiş) dosyalardaki değişiklikler saklanır.
- Yeni oluşturduğun, hiç git add yapılmamış dosyalar saklanmaz, olduğu yerde kalır.
- .gitignore içindeki dosyalar da saklanmaz.
Çözüm iki bayrak:
- git stash push -u — takip edilmeyen yeni dosyaları da dahil eder.
- git stash push -a — ignore edilenler dahil her şeyi alır. Dikkatli kullan; node_modules gibi klasörleri de içine çeker.
Sakladıklarını görmek
- git stash list — tüm kayıtları ve mesajlarını listeler.
- git stash show stash@{0} — özet istatistik verir; hangi dosyalar kaç satır.
- git stash show -p stash@{1} — tam diff'i gösterir. Geri koymadan önce mutlaka bak.
Geri Getirmek, Çakışmaları Çözmek ve Temizlik
apply mı, pop mu?
İkisi de değişiklikleri çalışma dizinine geri koyar. Fark, kaydın listede kalıp kalmamasıdır.
| Komut | Ne yapar | Ne zaman |
|---|---|---|
| git stash pop | En üsttekini uygular ve listeden siler | İşin bittiğinde, normal akış |
| git stash apply | Uygular ama listede bırakır | Aynı değişikliği iki branch'te deneyeceksen |
| git stash pop stash@{2} | Belirli kaydı uygular ve siler | Sıra atlamak gerektiğinde |
| git stash apply --index | Staged/unstaged ayrımını da korur | Add ettiğin dosyalar aynı kalsın istiyorsan |
Pratik kural: emin değilsen apply kullan, sonuç doğruysa git stash drop ile sil. Böylece yanlış branch'e uygulama riskini ucuza atlatırsın.
Çakışma çıktığında
Stash aldıktan sonra aynı satırlar başka bir commit'le değiştiyse Git çakışma bildirir. Panik yok:
- Çakışan dosyaları düzenle, işaretçileri (<<<<, ====, >>>>) temizle.
- git add ile çözülen dosyaları işaretle.
- Kayıt hâlâ listede duruyorsa git stash drop ile kaldır. Çakışmalı pop, kaydı otomatik silmez.
- Her şeyi geri almak istersen: git checkout -- . ve stash yerinde kalır, tekrar denersin.
Çakışma sıklıkla stash'i uzun süre bekletmekten çıkar. Kayıtları gün içinde tüket; hafta boyu bekleyen stash bir kod arkeolojisi projesine dönüşür.
Branch'e çevirmek ve listeyi temizlemek
- git stash branch feature/form stash@{0} — kaydın alındığı commit'ten yeni bir branch açar ve değişiklikleri oraya uygular. Çakışma riskini neredeyse sıfırlar. Bekleyen iş büyüdüyse en temiz yol budur.
- git stash drop stash@{1} — tek kaydı siler.
- git stash clear — hepsini siler. Geri dönüşü yoktur, iki kez düşün.
- Yanlışlıkla sildiysen git fsck --unreachable çıktısında commit'i arayabilirsin, ama garanti değild
© 2026 Yazılım Atölyesi