Git stash pop ve git stash arasındaki fark geçerlidir


1024

Uzun süredir kullanıyorum git stash pop. Son zamanlarda git stash applykomuta hakkında bilgi edindim. Denediğimde, aynı şekilde çalışıyor gibiydi git stash pop.

Arasındaki fark nedir git stash popve git stash apply?

Yanıtlar:


1627

git stash pop uyguladıktan sonra (varsayılan olarak en üstteki) zulayı atar , oysa daha sonra yeniden kullanmak için git stash apply saklamak listesinde bırakır (ya da daha sonra yapabilirsiniz git stash drop).

Bu git stash pop, sonradan çatışmalar olmadıkça gerçekleşir , bu durumda zulayı kaldırmaz ve tam olarak aynı şekilde davranmasını sağlar git stash apply.

Ona bakmak için başka bir yol: git stash popbir git stash apply && git stash drop.


117
@ briankip'in aşağıdaki cevap notları gibi, bir zulası patlattığında çatışmalar varsa, pop zulayı kaldırmayacak (ve tam olarak uygulamak gibi davranacak)
Kashif

Şubenizdeki düzeltilmemiş değişiklikler git stash popsonuçla aynı olsa bile , yine de bir çakışma hatası alırsınız.
DimP

79

John Zwinck'in belirttiği ve bir dezavantaj olduğu gibi, farkı ifade eden bu yararlı bağlantı var git stash pop.

Örneğin, saklanan değişikliklerin saklamanızı ilk oluşturduğunuzdan beri yaptığınız diğer değişikliklerle çakıştığını varsayalım. Hem pop hem de uygula, bu tür çatışmaları güzel bir şekilde çözmenize olanak tanıyan birleştirme çakışması çözümleme modunu faydalı bir şekilde tetikleyecektir ... ve belki de pop bekliyorsanız bile, her ikisi de saklılıktan kurtulamaz. Birçok insan zuvanaların sadece basit bir yığın olmasını beklediğinden, bu genellikle daha sonra aynı zulayı kazara atmalarına neden olur çünkü gittiklerini düşündüler.

Bağlantı: http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/


6
Bir pop başarısız olduğunda kalıcı bir saklanma gerçeği, ilk başta bu şekilde görünse bile, bir dezavantaj değildir.
Amalgovinus

65

git stash popüst stashed elemanı uygular ve yığından kaldırır. git stash applyaynı şeyi yapar, ancak bunu yığın yığınında bırakır.


42

Eylemde görmek farkı daha iyi anlamanıza yardımcı olabilir.

masterŞube üzerinde çalıştığımızı ve hello.txt"Merhaba" dizesi içeren bir dosyaya sahip olduğumuzu varsayarsak .

Dosyayı değiştirelim ve ona "world" dizesini ekleyelim. Şimdi yeni bulduğunuz küçük bir hatayı düzeltmek için farklı bir şubeye geçmek istiyorsunuz, bu yüzden stashdeğişikliklerinize ihtiyacınız var :

git stash

Diğer şubeye geçtiniz, hatayı düzelttiniz ve şimdi masterşubeniz üzerinde çalışmaya devam etmeye hazırsınız , böylece popdeğişiklikler:

git stash pop

Şimdi saklanan içeriği incelemeye çalışırsanız şunları elde edersiniz:

$ git stash show -p
No stash found.

Ancak, git stash applybunun yerine kullanırsanız, saklanan içeriği alırsınız, ancak aynı zamanda saklarsınız:

$ git stash show -p
diff --git a/hello.txt b/hello.txt
index e965047..802992c 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1 @@
-Hello
+Hello world

Aynı popyığının patlaması gibi - aslında patladığında öğeyi kaldırır apply, daha çok gözetime benzer .


5

Gelen git stash akım değiştirilen dosyalar taşınabilir bir saklama alanıdır.

stashalan, gitdepodan bazı değişiklikler almak ve depoda bulunan bazı karşılıklı dosyalarda bazı değişiklikler algılamak istediğinizde kullanışlıdır git.

git stash apply //apply the changes without removing stored files from stash area.

git stash pop  // apply the changes as well as remove stored files from stash area.

Not: - git applyyalnızca uygulama sırasında saklanan alandaki değişiklikleri uygulayın ve alandaki değişiklikleri git popkaldırın stash.


1

Git Stash Pop vs applyÇalışması

En iyi saklanan değişikliklerinizi şu anda kullanılmayan değişikliklere uygulamak ve bu saklamayı da silmek istiyorsanız, devam etmelisiniz git stash pop.

# apply the top stashed changes and delete it from git stash area.
git stash pop  

Ancak, en üst düzeyde saklanan değişikliklerinizi silmeden mevcut aşamalı olmayan değişikliğe uygulamak istiyorsanız, o zaman gitmelisiniz git stash apply.

Not: Bu durumu Stacksınıfın pop()ve peek()yöntemlerle ilişkilendirebilirsiniz; burada pop, üst kısmı azaltarak değiştirir (top = top-1), ancak peek()yalnızca üst öğeyi alabilir.

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.