git stash

Merhabalar, bu yazıda git kullanırken oldukça pratik bir komut olan stash komutunu anlatacağım.

Bu komut, işinizin yarıda kaldığı, o anda başka bir işe yönelmeniz gerektiğine elinizdeki commit edilmemiş çalışmayı stage edilmiş olsun veya olmasın geçici olarak FILO yapısına depolar. Daha sonra branch değiştirebilir, başka commitler gönderebilir, sonra diğer işinizi bitirip stash’lenen kodu pop edip çalışmaya devam edebilirsiniz.


Stash ettikten sonra status komutunda herhangi bir şey gözükmeyecektir. Ayrıca stash ettiğiniz dosyayı geri getirip çalışmanızı tamamlayıp server’a push ettiğinizde stash geçmişi hakkında hiçbir şey gözükmeyecektir, bu komut local üzerinde çalışır. Ignore edilen ve untracked olan dosyaların stash işlemi gerçekleştirilmez. Untracked dosyaları da stash’lemek için -u opsiyonu kullanmanız; bütün her şeyi (untracked ve ignored dosyalar dahil) stash’lemek için -a opsiyonu kullanmanız gerekmektedir. (-u : –include-untracked / -a : –all)

git stash
## make some other works, and turn back
git stash pop

git stash save “Your stash message”
Stash’ler üst üste bindiğinde hangisinin ne işe yaradığını bi yerden sonra unutursunuz, o yüzden stash’inize mesaj eklemeniz iyi olacaktır. Bu komutla stash kaydına mesaj ekleyebilirsiniz, “add material design” gibi

git stash list
Birden çok stash yaptıysanız mesajlarını da göstererek sıra numarasıyla liste olarak yazdırır. Çekmek istediğiniz stash’i numarasıyla çekersiniz.

$ git stash list
stash@{0}: On master: add material design
stash@{1}: WIP on master: 5002d47 our new homepage
stash@{2}: WIP on master: 5002d47 our new homepage
$ git stash pop stash@{2}

git stash pop vs. git stash apply
Bu iki komut arasındaki tek bir fark vardır, pop komutu stash kaydını silerken apply komutu stash kaydını silmeden dosyaları geri yükler.

git stash show
Diff komutuna benzer bu komutla değişiklikleri özet şeklinde görebilirsiniz, ayrıca -p opsiyonuyla ayrıntılı şekilde görüntüleyebilirsiniz.

git stash show -p

git log –oneline –graph stash@{0}
Bu komutla stash kayıtlarına ait workflow’u görebilirsiniz.

git stash branch <new-branch-name>
Bu komutla elinizdeki stash’la yeni bir branch oluşturulur ve stash kaydını siler. Mevcut branch’a stash yaptıktan sonra conflict ile karşılaştığınızda düzeltip öyle commit etmek için güzel bir yöntemdir.

git stash drop
Stash edilenler içerisindeki son stash kaydını siler, dikkatli olmak gerekir.

git stash clear
Tüm stash kaydını siler, dikkatli olmak gerekir.

Bir önceki git yazımı buradan okuyabilirsiniz.