git stash pop, daha önce geçici olarak saklanan yerel değişiklikleri mevcut dalın çalışma ağacına yeniden uygulamayı dener. Uygulama başarılı olursa ilgili stash kaydı listeden çıkarılır; çakışma oluşursa kayıt korunur ve çözüm sonrasında ne yapılacağına sen karar verirsin.
Komutun temel kullanım mantığı şudur: Henüz commit etmeye hazır olmayan çalışmayı geçici olarak sakla, başka dalda gerekli işlemi yap, ilk dala dön ve değişiklikleri geri uygula. Bu işlem Git CLI içinde çalışma durumunu kısa süreliğine taşımak için kullanılır.
git stash pop komutu nedir ve ne yapar?
Git stash, çalışma ağacındaki ve indeksindeki yerel değişiklikleri geçici bir kayıt olarak saklamaya yarar. git stash pop ise seçilen stash kaydındaki değişiklikleri, komutu çalıştırdığın anda üzerinde bulunduğun dalın mevcut çalışma ağacına uygulamayı dener. Komut kendi başına dal değiştirmez ve yeni bir commit oluşturmaz.
pop davranışı, değişiklikleri uygulama ile stash kaydını listeden kaldırma işlemlerinin birlikte düşünülmesidir. Uygulama sorunsuz tamamlanırsa kayıt stash listesinden düşürülür. Uygulama çakışmayla sonuçlanırsa kayıt otomatik olarak silinmez. Böylece çakışmayı çözerken ilgili değişiklik kaydını koruyabilirsin. Bu davranış, Git stash belgelerinde de açıklandığı gibi, başarısız bir geri yüklemede stash kaydının korunmasını sağlar.
Belirli bir stash kaydını uygulamak için temel kullanım şu şekildedir:
git stash pop stash@{0}
Bu komutta stash@{0}, uygulanacak kaydı belirtir. Beklenen sonuç, stash içindeki değişikliklerin mevcut dalda yeniden görünmesidir. İşlem temiz tamamlanırsa kayıt listeden çıkarılır; Git bir çakışma bildirirse kayıt listede kalır ve dosyalardaki durum ayrıca incelenir.
Geçici değişiklikleri saklayıp geri almak ne zaman işe yarar?

Bir özellik üzerinde çalışırken değişikliklerin henüz anlamlı bir commit oluşturacak kadar tamamlanmamış olabilir. Buna rağmen başka bir dala geçmen, oradaki bir düzeltmeyi incelemen veya farklı bir işi kısa süreliğine ele alman gerekebilir. Böyle bir durumda önce git status ile hangi dosyaların değiştiğini kontrol edip ardından git stash push ile mevcut durumu geçici olarak saklayabilirsin.
Genel sıra şöyledir: Çalışma durumunu kontrol et, değişiklikleri stash ile sakla, diğer dala geç, gerekli işlemi tamamla, ilk dala geri dön ve uygun kaydı git stash pop ile uygula. Bu yöntem, henüz commit etmeye hazır olmayan yerel değişiklikleri dal değişimi sırasında taşımak için uygundur.
git stash push sonrasında çalışma dizininin temiz görünmesi beklenen bir durumdur. Bu temizlik, değişikliklerin silindiği anlamına gelmez; değişiklikler stash kaydında tutulur. Bu nedenle temiz çalışma dizini, tek başına git stash pop için hata değildir. Ancak geri döndüğün dalın dosya durumu stash oluşturulduğu andan farklılaşmışsa uygulama sırasında çakışma oluşma ihtimalini ayrıca değerlendirmelisin.
git stash pop sözdizimi ve temel kullanım seçenekleri
git stash pop için temel sözdizimi şöyledir: git stash pop [--index] [-q | --quiet] [<stash>]. İsteğe bağlı <stash> bölümü verilmezse Git en yeni stash kaydını, yani stash@{0} kaydını hedefler. Belirli bir kaydı geri getirmek için stash@{1} gibi bir başvuru kullanabilirsin.
Hangi kaydı uygulayacağını seçmeden önce git stash list ile kayıtları görüntüleyebilirsin. Ardından değişiklik özetini incelemek için git stash show --stat stash@{0} komutunu çalıştırabilirsin. --index, çalışma ağacındaki değişikliklere ek olarak stash içinde saklanan index, yani stage edilmiş durumu da geri yüklemeyi dener. --quiet veya kısa biçimi -q, bilgilendirme çıktısını azaltır. Çalışma dizininin temiz olması, git stash pop için tek başına hata değildir. Uygulanabilir bir stash kaydı varsa Git onu mevcut çalışma ağacına uygulamayı dener.
Aşağıdaki örnek Git Bash, macOS veya Linux terminalinde yeni bir depo oluşturur, bir dosyayı commit eder, değişikliği stash içine alır ve farklı bir dala geçip geri döndükten sonra git stash pop ile değişikliği yeniden getirir:
$ mkdir git-stash-pop-demo
$ cd git-stash-pop-demo
$ git init -q
$ git branch -M main
$ git config user.name "Git Öğrencisi"
$ git config user.email "[email protected]"
$ printf "Başlangıç notun" > notes.txt
$ git add notes.txt
$ git commit -qm "ilk not"
$ printf "İkinci satırn" >> notes.txt
$ git stash push -m "not taslağı"
Saved working directory and index state On main: not taslağı
$ git stash list
stash@{0}: On main: not taslağı
$ git switch -c demo-branch
Switched to a new branch 'demo-branch'
$ git switch main
Switched to branch 'main'
$ git stash pop
On branch main
...
Dropped refs/stash@{0} (...)
$ git status --short
M notes.txt
$ cat notes.txt
Başlangıç notu
İkinci satır
Çıktıdaki dal adı, commit özeti ve ayrıntılı durum satırları ortama göre değişebilir. Önemli sonuç, değişikliğin stash'ten geri gelmesi, git status --short çıktısında M notes.txt durumunun görünmesi ve başarılı uygulamadan sonra stash@{0} kaydının kaldırılmasıdır.
git stash pop ile git stash apply arasındaki fark nedir?

git stash pop ve git stash apply aynı stash değişikliklerini mevcut çalışma ağacına uygulamayı dener. Temel fark, başarılı uygulamadan sonra stash kaydının listede tutulup tutulmamasıdır. pop başarılı olursa kayıt kaldırılır. Çakışma nedeniyle uygulama tamamlanamazsa kayıt listede kalabilir. apply ise uygulama başarılı olsa da stash kaydını korur.
| Ölçüt | git stash pop | git stash apply |
|---|---|---|
| Değişiklikleri uygulama | Stash değişikliklerini mevcut çalışma ağacına uygular. | Stash değişikliklerini mevcut çalışma ağacına uygular. |
| Başarılı uygulama sonrasında stash listesindeki durum | Kayıt listeden kaldırılır. | Kayıt listede korunur. |
| Yeniden deneme imkânı | Başarılı uygulamadan sonra aynı kayıt doğrudan yeniden kullanılamaz. | Aynı kayıt daha sonra yeniden uygulanabilir. |
| Çakışma sonrası davranış | Çakışma nedeniyle uygulama tamamlanamazsa kayıt listede kalabilir. | Kayıt zaten korunduğu için yeniden deneme imkânı devam eder. |
| Hangi durumda tercih edileceği | Tek seferlik ve başarılı bir geri alma sonrasında tercih edilebilir. | Sonucu önce denemek veya aynı stash kaydını tekrar kullanmak gerektiğinde daha uygundur. |
Sonucu önce denemek, aynı kaydı başka bir dalda yeniden kullanmak veya çözüm öncesi geri dönüş payı bırakmak istediğinde apply daha kontrollü bir seçimdir. Stash kaydının başarılı ve tek seferlik bir geri alma sonrasında listeden kaldırılmasını istiyorsan pop kullanabilirsin. Çakışmalı bir pop sonrasında kayıt korunabileceği için, çözüm tamamlanmadan stash'i ayrıca kaldırmamak gerekir.
Çakışma olduğunda git stash pop nasıl çözülür?
git stash pop komutu, stash kaydındaki değişiklikleri mevcut çalışma ağacına uygular ve işlem başarılı olduğunda kaydı listeden kaldırır. Aynı satırlar hem mevcut dalda hem de stash kaydında değişmişse Git bunları otomatik olarak birleştiremeyebilir. Bu durumda stash kaydı korunur ve çakışmayı elle çözmen gerekir.
Terminalde aşağıdakine benzer bir çıktı görebilirsin:
$ git stash pop stash@{0}
Auto-merging notes.txt
CONFLICT (content): Merge conflict in notes.txt
On branch feature/notlar
...
The stash entry is kept in case you need it again.
Bu çıktı, notes.txt dosyasının birleştirilemediğini ve stash kaydının silinmediğini gösterir. Çözüm tamamlanmadan aynı kayıt için git stash pop komutunu tekrar çalıştırma.
- Durumu belirle:
git statusçalıştır ve unmerged paths olarak listelenen dosyaları belirle. - Dosyayı düzenle: Çakışan dosyayı aç.
<<<<<<<,=======ve>>>>>>>işaretleri arasındaki içerikleri karşılaştır. Doğru satırları seç veya iki tarafı bilinçli biçimde birleştir. Ardından tüm çakışma işaretlerini dosyadan kaldır. - Çözümü işaretle: Düzenlediğin dosyayı
git add notes.txtkomutuyla stage alanına al. Birden fazla dosya varsa her dosya için işlemi tekrarla. - Sonucu incele:
git diff --cachedkomutuyla bir sonraki commit'e girecek içeriği gözden geçir. Hatalı bir satır varsa dosyayı yeniden düzenleyip tekrargit addçalıştır. - Kontrolleri yap: Gerekli testleri, uygulama çalıştırmalarını veya ilgili manuel kontrolleri gerçekleştir. Sonra
git statusçıktısında hâlâ birleştirilmemiş dosya kalmadığını kontrol et. - Stash durumunu doğrula:
git stash listile orijinal kaydın hâlâ listede olduğunu gör. Değişiklikler güvenle korunduktan ve gerekiyorsa commit edildikten sonra artık ihtiyaç duyulmayan kaydıgit stash drop stash@{n}ile kaldırabilirsin.
Dosyayı düzenledikten sonra temel komut akışı şöyle olabilir:
git status
git add notes.txt
git diff --cached
git status
git stash list
Beklenen sonuç, dosyanın çakışma işaretlerinden arındırılması, çözümün stage alanında görünmesi ve stash kaydının silinip silinmeyeceğine bilinçli biçimde karar verilmesidir.
Yaygın hatalar ve güvenli kontrol adımları
Stash listesi boşken pop çalıştırmak
git stash list hiçbir kayıt göstermiyorsa argümansız git stash pop uygulayacağı bir stash bulamaz ve işlem tamamlanmaz. Önce gerçekten kullanılabilir bir stash kaydı olup olmadığını kontrol et.
Yanlış stash indeksini seçmek
stash@{0} listedeki en üst kaydı, stash@{1} ise sonraki kaydı ifade eder. Yeni bir stash oluşturmak veya bir kaydı drop etmek indekslerin değişmesine neden olabilir. Bu nedenle önce git stash list, ardından gerekirse git stash show --stat stash@{n} çalıştırarak içeriği doğrula.
Mevcut yerel değişiklikleri hesaba katmamak
Hedef çalışma dizininde korunmamış değişiklikler varken stash uygulamak, aynı dosyalarda çakışmaya veya Git'in mevcut içeriğin üzerine yazmamak için işlemi durdurmasına yol açabilir. Önce git status ile durumu gör. Gerekli değişiklikleri commit ederek veya ayrı bir stash oluşturarak korumadan git reset --hard ya da git clean gibi yıkıcı temizleme komutlarına başvurma.
Temiz çalışma dizinini hata sanmak
Çalışma dizininin temiz olması tek başına hata değildir. git stash list içinde bir kayıt varsa temiz çalışma dizini, git stash pop için uygun bir başlangıç olabilir. Karar vermeden önce git status, git stash list ve gerektiğinde git stash show --stat stash@{n} çıktısını birlikte incele.
Sık Sorulan Sorular
Çalışma dizini temizken git stash pop çalıştırılabilir mi?
Evet. Temiz çalışma dizini tek başına hata değildir. git stash list bir kayıt gösteriyorsa git stash pop bu kaydı mevcut dala uygulayabilir.
git stash pop çakışma çıkarırsa stash kaydı silinir mi?
Hayır. Çakışma nedeniyle uygulama tamamlanamazsa stash kaydı listeden çıkarılmaz. Çakışmaları çözüp kontrolleri yaptıktan sonra kayda ihtiyacın kalmadıysa git stash drop ile manuel olarak kaldırabilirsin.
git stash pop ile belirli bir stash kaydı nasıl seçilir?
Önce git stash list ile kayıtları gör, ardından seçtiğin indeksi komuta ekle: git stash pop stash@{2}. İndeksi işlemden hemen önce yeniden kontrol et.
git stash apply ne zaman git stash pop yerine tercih edilir?
Stash kaydını koruyarak uygulamayı denemek istediğinde git stash apply daha uygundur. Örneğin çakışma ihtimali varsa veya aynı değişiklikleri daha sonra yeniden kullanacaksan git stash apply stash@{1} çalıştırabilirsin. Başarılı uygulamadan sonra kayıt listede kalır.
Çakışma durumunda önce mevcut durumu görmek, sonra dosyaları bilinçli biçimde düzenlemek ve stash kaydını yeniden doğrulamak güvenli bir çalışma düzeni sağlar.