Git Stash Create ile oluşturulan bir zulası nasıl silebilirim?


549

Git stash, istediğim şeylerin çoğunu yapıyor gibi görünüyor, ancak hiçbir değişiklik yoksa, deponuzda değişikliklerinizden git stash; git stash popfarklı bir şey yapacak.

Görünüşe göre git stash createbu sorunun cevabı ve her şey işe yarıyor, tek bir şey hariç… Yaratılan zeminden kurtulamıyorum. Zıvanadan kurtulmanın bir yolu var mı?

Ne yaptığımı% 100 netleştirmek için:

Zulayı oluşturun:

~/tmp/a(master) $ git stash create 
60629375d0eb12348f9d31933dd348ad0f038435
~/tmp/a(master) $ git st
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#
~/tmp/a(master) $ git reset --hard
HEAD is now at 555d572 log message

Zulayı kullanın:

~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435
fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory
~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#

Stash'ı silin: (bu son bitin çalışması dışında)

~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference

Zaman içindeki mesafeye rağmen, diğer gezginler için git apply, bu yazının yazıldığı sırada ikinci kod kutusundaki çalışmanın bir yama uygulamadığını belirtmek istiyorum - çıktıdaki hata mesajı bunu söyledi. Yani aslında, yaratılmamış bir zulası oluşturmaya çalışmadınız ve yaratılmamış bir zulası bıraktınız. Bu yüzden hiçbir şey yapmadın.
Profesör Tom

1
Stash yaratıldı, bu yüzden bir karma kod döndürdü ve neden git stash applyişe yaradı. Mevcut olmayan git applybir yerel yama dosyasını okuma girişimleri. Dürüst olmak gerekirse, muhtemelen orada olmamalı ve asla çalışamazdı. Soruyu belirsiz bir şekilde kaldırmak için cazipim, ancak mevcut formunda çok fazla yardımcı olduğu göz önüne alındığında, olduğu gibi bırakacağım.
Paul Wagland

Yanıtlar:


367

İle oluşturulmuş normal bir saklamak silmek için git stash, git stash dropveya git stash drop stash@{n}. Daha fazla ayrıntı için aşağıya bakın.


İle oluşturulmuş bir zulayı silmenize gerek yoktur git stash create. Dokümanlardan:

Bir düzenli giriş nesnesi oluşturun (normal bir kesinleştirme nesnesidir) ve ref ad alanında herhangi bir yere kaydetmeden nesne adını döndürün. Bunun komut dosyaları için yararlı olması amaçlanmıştır. Muhtemelen kullanmak istediğiniz komut değildir; yukarıdaki "kaydet" bölümüne bakın.

Hiçbir şey saklanma taahhüdüne gönderme yapmadığından, sonunda çöp toplanacaktır.


İle oluşturulmuş git stashveya git stash saveile saklanan refs/stashve ile silinebilir git stash drop. Tüm Git nesnelerinde olduğu gibi, gerçek saklama içeriği, gcbu nesnelerin süresi dolduktan sonra kuruyana kadar bilgisayarınızdan silinmez (varsayılan 2 hafta sonradır).

Eski refs/stash depolar reflog'a kaydedilir (try cat .git/logs/refs/stash) ve ile gösterilen numara git stash drop stash@{n}nerede ile silinebilir .ngit stash list


20
Başlıklı soruya cevap vermiyor. Sonuç olarak, benim gibi soruya Google aracılığıyla ulaşan ve başlıklı sorunun cevabını arayan ve gerçek detayları önemsemeyen kişiler, gerçekten yanıtlayan kişiye oy verin. Bazı insanlar da kabul edilmeyen cevabı kibarca aşağıya indirirler çünkü onlara yardımcı olmaz. Şahsen bana yardımcı olan cevabı iptal ettim.
ArtOfWarfare

15
Yani: 1) Google "git delete stash" 2) soru başlığının ilk yarısına dayalı SO linkine tıklayın 3) başlığın ikinci yarısına özgü doğru cevabı aşağıya indir. Bu yeni bir tane.
dahlbyk

10
@ArtOfWarfare O zaman bu, okuduğunu anlama eksikliği olurdu, çünkü bu çok açık bir şekilde "başlıklı soruya" bir yanıttır.
Chris Hayes

1
Yeterince adil. Zarflarımı sadece kullanarak yaratıyorum git stash- bunun aslında git stash createbaşka bir şeyle eşleşip eşleşmediğini bilmiyorum . Git kesinlikle hâlâ öğrendiğim bir şey (eğer olmasaydı, SO Q & As as like this
as okurdum

1
@AdrianPronk Bu tam olarak aslında git stash createiçin tavsiye ederim bir şey . Zaman damgalı bir yama dosyasına kaydetmek yerine, git reflog'un sizin için özel bir ref'de (örneğin refs/backup) kaydetmesine izin verebilirsiniz . 1) git stash create, 2) yeni saklanmış ağaçlarla karşılaştırırım refs/backup^{tree}, 3) ağaç farklıysa git update-ref --create-reflog refs/backup <stash-sha>. Sonunda eski yedekleme yığınları otomatik olarak budanır.
dahlbyk

838

git stash dropÜst zulası düşer - - hayır parametre alır veya zula referansı gibi hangi görünüyor: stash@{n}hangi ndüşmesi saklamak atar. Bir taahhüt kimliği iletemezsiniz git stash drop.

git stash drop            # drop top hash, stash@{0}
git stash drop stash@{n}  # drop specific stash - see git stash list

Bir saklamak olacak değiştirmekstash@{n} daha aşağı yığın tüm stashes belirtme.

Neden bir stash düşürmeniz gerektiğini düşündüğünüzden emin değilim çünkü eğer stash createstash girişi kullanıyorsanız "stash" için oluşturulmaz, bu yüzden bırakacak bir şey yoktur.


Giriş "stash" kullanılarak oluşturulur ... Mantıksal olarak "stash" kullanılarak kaldırılacağını düşünürdüm.
Paul Wagland

2
Git stash için man sayfasına bakınız. stash create bir girdi oluşturmaz, yalnızca stash için bir komut nesnesi oluşturur, bu nedenle stash günlüğünde kaldırılacak herhangi bir girdi yoktur.
CB Bailey

3
Adamdan : oluşturmak ve ref ad alanında hiçbir yerde depolamak olmadan kendi nesne adını döndürmek (düzenli bir nesne işlemek olduğunu) bir zulası oluşturun.
ruffin

40
Dikkat : Muhtemelen 1, 2, 3 gibi birden fazla bırakmamalısınız, çünkü aslında 1, 3 ve 5 numaralı sayıları düşürürsünüz. 1, 2 ve 3'ü düşürmenin doğru yolu, bunları 3, 2, 1 veya 1, 1, 1 düzeninde yapın. Ayrıca, 0 dizine eklenir, 0 yığının en üstünde olur.
ArtOfWarfare

2
Git Uzantıları, "Stash Değişiklikleri" düğmesine basıldığında bilinmeyen bir komut yayınlar ve ne yaparsa yapın uygulamadan çıkma ve yeniden başlatma konusunda devam eder. GUI kullanarak stash kurtulmak için belirgin bir yolu yoktur, ama komut satırından "git stash list" WIP stash gösterir ve "git stash clear" ondan kurtulur.
Dave

215

Yalnızca bir zuvana sahip olduğunuzdan% 100 eminseniz veya tüm zulayı silmek istiyorsanız ( a'nıngit stash list % 107 olduğundan emin olun), şunları yapabilirsiniz:

git stash clear

..ve onları unut (tüm saklamakları siler).

Not: Bu cevabı, hepsini (benim gibi) temizlemenin bir yolunu arayanlar için ekledi.


26
Sadece bir zuvanız varsa, yine de kullanmanızı tavsiye ederim git stash drop, çünkü bu sadece bir zulası düşürür ve beklenenden fazla kaybetme konusunda endişelenmenize gerek yoktur.
Paul Wagland

Soruyu gerçekten cevapladığı için, bunun en iyi uygulama olup olmadığı değil. Aslında buna ihtiyacım var, çünkü bugün yarattığım depoların gitmesi gerekiyor.
Alex McCabe

2
Uzun zamandır stash kullanıyorum. Ancak bu sefer git stash dropher zamanki gibi kullanarak yaptığım son sakatlıktan kurtulamadım . Farklı yaptığımdan emin değilim. Her neyse, git stash clearbenim için çalıştı. Var olduğunu bilmiyordum. +1
Konstantinos Gaitanis

3
+1 çünkü git zulayı bırakmayı reddediyordu, zulası tarafından oluşturulan dosyalardan biri zaten mevcuttu ..
Thiago Barcala

12
özellikle% 107 emin.
levininja

84

Git doc'den: http://git-scm.com/docs/git-stash

bırak [-q | --quiet] []

Stash listesinden tek bir stashed durumunu kaldırın. Hayır verildiğinde, en sonuncusu kaldırılır. yanistash@{0} , aksi takdirde stash @ {} biçiminin geçerli bir günlük kaydı başvurusu olmalıdır.

misal:

git stash drop stash@{5}

Bu stash girdisini 5 silecektir. Tüm stash listesini görmek için:

git stash list

4
Sorunun alt kısmına git stash drop'un istediğimi yapmadığını açıkça söylüyorum.
Paul Wagland

1
Yürütmeden git stash show stash@{REPLACE_IT_WITH_STASH_INDEX}önce - kullanarak bir saklamak içeriğini kontrol etmenizi tavsiye ederim git stash drop. İnan bana, bu çok fazla sorun kurtaracak :)
realPK

71

Kullanıyor olmalısın

git stash save

ve yok

git stash create

çünkü bu bir zulası (normal bir taahhüt nesnesi) oluşturur ve nesne adını herhangi bir yerde saklamadan döndürür ref ad alanında . Bu nedenle stash uygulamasıyla erişilemez.

kullanım git stash save "some comment" , başka bir dalda çoğaltmak / taşımak istediğiniz değişmemiş değişiklikleriniz olduğunda kullanılır

kullanım git stash apply stash@{0}Kaydedilmiş (saklanmış) değişikliklerinizin mevcut dalınıza yansımasını istiyorsanız (kaydedilmiş saklamak dizininizin 0 olduğunu varsayarak)

her zaman kullanabilirsin git stash list tüm dizinleri kontrol etmek için

ve git stash drop stash@{0}(kaydedilmiş saklamak dizininizin 0 olduğunu ve silmek istediğinizi varsayalım) kullanarak belirli bir saklamayı silin.


3
Sadece bilgi için - Komut git stashvarsayılanlarını yazmakgit stash save
RBT

1
git stash createkomut dosyaları tarafından kullanılması amaçlanmıştır. Bu OP'nin kullanım durumu. Bu nedenle tavsiye etmek git stash save"normal" kullanımlar için yararlı olabilir, ancak OP'nin kullanım durumu için uygun olmayabilir. OP, belgelere bakmak isteyebilir : komut dosyası oluşturma ile ilgili daha fazla komut vardır, örneğingit stash store
Adrian W

1
git stash save "message"günümüzde okumalıyız git stash push -m "message". Karşılaştırgit commit -m "message"
Tino

2

Ayrıca çalışır

git stash drop <index>

sevmek

git stash drop 5

1

Belge burada (Çince) lütfen tıklayınız.

kullanabilirsiniz

git saklamak listesi

git stash drop stash @ {0}

resim açıklamasını buraya girin


git stash createfarklıdır git stash save, özellikle, dolayısıyla soru listesinde görünmüyor form oluşturmak ve bırakılan olamaz.
Paul Wagland

@PaulWagland Cevabınız için teşekkür ederiz. Dürüst olmak gerekirse official Resmi belge "git stash create" int bulamıyorum. Ama bu konuda, ben ilgileniyorum. "Git stash create" bulmak istiyorsanız "git stash list". bunu yukarıda yapabilirsiniz.
Longalei

0
git stash           // create stash,
git stash push -m "message" // create stash with msg,
git stash apply         // to apply stash,
git stash apply indexno // to apply  specific stash, 
git stash list          //list stash,
git stash drop indexno      //to delete stash,
git stash pop indexno,
stash pop = stash drop + stash apply
git stash clear         //clear all your local stashed code
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.