Git Rafı vs Stash


275

Git'in shelveyönünü çok iyi bilmiyorum . Eğer stashne olduğunu bir kenara bitmemiş işleri koymak için kullanılır shelveo zaman? Ne için kullanırdın?

Örneğin Projeyi Güncelle (VCS menüsünden)

resim açıklamasını buraya girin

biri alacak (Fikir 2019'da.2)

resim açıklamasını buraya girin


14
shelvegit komutu değildir. Bu sorunun bağlamı nedir, bu terimler nereden geliyor? shelvediğer bazı araçlarda var ama git'in bir parçası değil.
Jonah

2
Git stash shelvebzr, hg, vb. İle benzerdir . Bazı git birlikte çalışabilirlik paketinden mi bahsediyorsunuz?
drRobertz

3
Kabul edilen sorunun cevabı muhtemelen onaylar daha upvotes bu (çok IDEA itibaren) benim de şüphe oldu, bu soru geçerlidir ve '' terimine Raf" eşit bir git komutu olarak yanlış anlaşılır Teşekkür sorduğunuz için..
PravyNandas

Yanıtlar:


266

git shelve Git'te mevcut değil.

Sadece git stash:

  • çalışma dizininin ve dizinin geçerli durumunu kaydetmek istediğinizde, ancak temiz bir çalışma dizinine geri dönmek istediğinizde.
  • yerel değişikliklerinizi kaydeder ve çalışma dizinini HEAD taahhüdüne uyacak şekilde geri döndürür.

Bir daldaki değişiklikleri izole etmek için 2008 eski bir proje git rafınız vardı , ancak bu bugünlerde çok yararlı olmayacaktı.

Intellij IDEA raf iletişim kutusunda belgelendiği gibi , " raf ve unshelving " özelliği bir VCS'ye (Sürüm Kontrol Sistemi aracı) değil, henüz değişiklik yapmadığınız halde bekleyen değişiklikleri geçici olarak saklamak için IDE'nin kendisine bağlıdır.

Git 2.13'ten (Q2 2017) bu yana, artık tek tek dosyaları da saklayabileceğinizi unutmayın .


73
Anlaşılan konsepti yanlış anladım. Aslında IntelliJ IDEA'dan üçüncü bir şey olduğunda Git komutu olduğunu düşündüm. Git belgelerini bulamadım, bu yüzden bir şey eksik olduğunu düşündüm. jetbrains.com/idea/help/shelving-and-unshelving-changes.html
Edgar Martinez

2
Doküman bağlantınız, "rafların" yalnızca IntelliJ IDE tarafından yönetilen değişikliklerin (yama) ayarlandığını, Git tarafından yönetilen standart şeyler olan "yığınların" bağlantısını kaldırın. Yani raflardan kaçının.
barbara.post

2
@ jerry chin shelve sizin durumda saklamak daha iyidir. Keşke git'te raflar olsaydı. Webstorm RAM'i emer. Git olsaydı cmd satırında çalıştırabilirsek yararlı olurdu
digender mahara

2
Rafın, zulasının ele almadığı, sorunlu iş arkadaşları / şirket uygulamalarıyla ilgilenen yaygın bir kullanım durumu vardır. Tam çöpün deponuza eklenmesi ve birinin deliliği nedeniyle onu düzeltmek için koşer olmamak mümkündür. Alternatif gibi bir şey git stash && <your actual command> && git stash popama bu berbat. Otomatik raf ve uygulama ihtiyacımız olana daha yakın.
smaudet

1
@VonC aynı değil - Kullandığım projelerin gerektirdiğim ayarlara sahip oldukları bir kullanım durumum var, çünkü 'standart değiller'. Ve yarım düzine diğer kullanım durumları dev / test / prod vs yerel kalkınma için değişiklik dosyaları vb oluşturmak gibi şeyler dahil karşılaştım.
smaudet

187

JetBrains IDE'leri Git ile birlikte kullanıldığında, "raf ve unshelving'e ek olarak saklama ve sökme eylemleri de desteklenir. Bu özelliklerin çok ortak noktası vardır; en büyük fark yamaların oluşturulma ve uygulanma biçimidir. Raf tek tek dosyalar veya grupla çalışabilir Stash aynı anda yalnızca bir dizi değiştirilmiş dosyayla aynı anda çalışabilir. İşte aralarındaki farklar hakkında daha fazla ayrıntı . "


10
Rafın git stash'dan daha esnek olduğu anlaşılıyor .
Dmitry Davydov

12
@DmitryDavydov İkisini de etkileyen şey var git stash -p. Ne yazık ki sadece komut satırında.
Vee

1
@TheVee evet işlevsellik açısından rafa çok benzer, bilgi için teşekkürler.
Dmitry Davydov

10
Aslında, Git
2.13'ten

5
Örneğin belgeleri otomatik olarak oluşturmak istediğiniz her seferinde uygulamak istediğiniz bir değişiklik yaması olduğunda, rafı çok yararlı buldum . Shelve .idea / shelve içinde bir dosya oluşturur ve bu dosyayı VCS'ye ekleyebilir ve tüm ekibinizle paylaşabilirsiniz, böylece bu değişiklikleri uygulayabilir ve aynı görevleri yürütebilirler.
ingkevin

63

Önceki cevaplara ek olarak benim için önemli olan bir şey var:

shelveJetBrains ürün özelliği (örneğin, bir WebStorm, PhpStorm, PyCharmvb.) Raflı dosyaları .idea/shelfdizine koyar .

stashgitseçeneklerden biridir . Stashed dosyalarını .gitdizinin altına koyar .


2
Bu kritik soruyu açıklığa kavuşturduğunuz için teşekkür ederiz.
AmerllicA

4

Değişikliklerimi başka bir yerde paylaşmıyorsam değişiklikleri saklamak yerine rafları tercih ederim.

Stashing bir git özelliğidir ve size belirli dosyaları veya dosya içindeki değişiklikleri seçme seçeneği sunmaz. Raflar bunu yapabilir, ancak bu bir git özelliği değil, IDE'ye özgü bir özelliktir:

resim açıklamasını buraya girin

Gördüğünüz gibi rafımda hangi dosyaların / satırların ekleneceğini belirleyebiliyorum. Bunu saklamakla yapamam.

IDE'de raf kullanmanın yamalarınızın taşınabilirliğini sınırlayabileceğinden emin olun çünkü bu değişiklikler bir .git klasöründe saklanmaz.

Bazı yararlı bağlantılar:

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.