Git stash dalına özel mi yoksa tüm havuz için mi?


95

Bir şubeye gittim ve bazı işler yaptım. Başka bir şubeye gitmek istedim ama taahhüt etmek istemedim bu yüzden yaptım git stash. Sonra yaptım git checkout <otherbranch>. Orada bazı işler yaptım ve ilk şubede olduğu gibi, işi yapmadan önce ondan çıkmak istedim. Ben de git stashorada yaptım . İlk şubeye geri döndüm ve git stash popo belirli şubeden zulayı alacağını düşünerek onu ( ) açmaya çalıştım . Zulayı <otherbranch>(en son saklanan) çıkardığına şaşırdım . Zulanın şubeye özgü olduğu izlenimine kapılmıştım, ancak bu davranış tüm yerel depo için yalnızca bir zula olduğunu gösteriyor.

Şubeye git stashözgü mü yoksa tüm arşiv için mi? Deponun tamamı içinse, şubeye özgü hale getirmek için ona seçenekler aktarabilir miyim?

Yanıtlar:


43

Mevcut zula yığınını görmek için:

git stash list

Yığından belirli bir zula seçmek için , yukarıda gösterilen şekilde ona bakın .stash@{number}

Davranışın dallara göre olmasını istiyorsanız, dalda bir kesinleştirme (veya birden çok kaydetme) yapabilirsiniz. Taahhütleri daha sonra her zaman "kaldırabilirsiniz" (örneğin, bunlardan git resetbiriyle --softveya --mixed; git reset belgelerine bakın ; veya git rebase -igeçicileri atarken yalnızca nihai "gerçek" yürütmeleri tutmak için).

(Gerçekten öykünmek git stashiçin, biri dizin durumu ve diğeri çalışma ağacı durumu için olmak üzere en az iki işlemeye ihtiyacınız vardır. Ancak, dizin durumunu kaydetmeyi ve geri yüklemeyi planlamıyorsanız, yalnızca git add -Atüm çalışma ağacı durumunu yapabilirsiniz. ve bunu geçici yürütmeye koyun. Alternatif olarak, git stashbir kabuk betiğidir, böylece varsayılan olarak dal başına çalışmasını sağlamak için oldukça kolay bir şekilde kopyalayabilir ve değiştirebilirsiniz, örneğin, tek bir global için yerine çalışma ad alanı olarak kullanarak Deponun tamamı. Açıkça adlandırarak bir şubeden diğerine bir zula getirebilirsiniz.)refs/pb-stash/branchrefs/stash


stash listSadece bir açıklamaya ek olarak her bir öğenin dosya listesinin nasıl görüntüleneceğini biliyor musunuz ?
2013

2
git stash show(veya sürüm git stash show stash@{<number>}dışındaki bir şey için @{0}) size a diff --stat; -pdaha büyük bir fark elde etmek için ekleyin . Not: Bu, "zula çantasındaki" "çalışma ağacını" , bağlı olduğu kaydetme ile karşılaştırır; Verilen zula çantasındaki "dizinde" ne olduğunu görmek için bir ön uç arayüzü yoktur.
torek

55

Hayır ve Hayır. Git stash depo başına.

İşte nasıl kullanılacağına dair güzel bir sayfa.


ikinci zula birincinin üzerine mi yazıyor? IOW, iki zula yaparsam ancak arada çözme olmazsa, ilk zulayı kaybeder miyim?
2013

1
Hayır, bir yığın zula (son giren ilk çıkar) alırsınız.
Zula yığına bir zulayı itiyorsun

18

git stash dal başına değil.

  • Bunun yerine git stash(çok sayıda zula ve dalınız olduğunda kolayca kaybolabilir)
  • git commitBitmemiş kodu şubenize kaydetmek için bir yapmanızı öneririm ve kodu bitirmeye hazır olduğunuzda git reset ${COMMIT_HASH_VALUE}bitmemiş kodu geri almak için bir yapın
  • git commitve birlikte doğru git resetkullanıldığında belirli bir dal için bir simüle edebilirgit stash

İşte commitve resetkomutlarının değerini ve kullanımını gösteren yaygın bir gerçek hayat senaryosu :

  • özellik dalı X üzerinde çalışıyorsunuz ve kodunuz testleri bile derlemiyor veya geçmiyor
  • mevcut yeni özellikten daha yüksek öncelikli bir hata var ve bu nedenle hata düzeltmesi üzerinde hemen çalışmaya başlamalısınız
  • git zulası yapmak yerine (ve çok sayıda zulanız ve çok sayıda dalınız olduğu için zula karışım içinde kaybolur)
  • bir git commitözellik dalı yapabilirsiniz X
    • not COMMIT_HASH_VALUEiçin daha sonra
  • düzeltme için yeni bir Y şubesini kontrol edin
  • Y dalındaki düzeltmeyi bitirin (düzeltmeyi taban çizgisine almak için bir birleştirme isteği yapın ve düzeltme dalını silin)
  • ardından X özellik dalını tekrar kontrol edin
  • derlemeyen veya testi geçmeyen bitmemiş çalışmanızı ortaya çıkarmak için -> sadece git reset ${COMMIT_HASH_VALUE}

(İçin Bilginize varsayılan git resetDİR --mixed)


2
Bu senaryoda sıfırlama için kullanışlı bir kısayol git reset HEAD~1.
Sam A. Horvath-Hunt

1
@samHH git reset HEAD ^ 1'in yanlışlıkla iki kez vurulduğu çok fazla örneğim oldu ... bu yüzden HEAD^1veya kullanmamayı seçiyorum HEAD~1.
Trevor Boyd Smith

11

Buradaki her yanıtın neden commit+ ile zulayı taklit etmeyi önerdiğinden emin değilim reset. Stash, özellikle birden fazla dalda çalışırken mükemmel bir şekilde kullanılabilir. Ayrıca, birden çok dalda çalıştığımda da taahhütte bulunmak istemiyorum, çünkü geri döndüğümde tüm değiştirilmiş değişikliklerin editörümde vurgulanmasını istiyorum.

İşte zula iş akışı:

Şubeyi değiştirmeniz gerektiğinde ve taahhüt etmeye hazır olmadığınızda, değişikliklerinizi yığına kaydedin

git stash save "Your custom stash message"

Bir şubeye döndüğünüzde, zulayı kontrol edin

git stash list

görüntü açıklamasını buraya girin

Eğer şubede FixIssue0203iseniz kullanabilirsiniz git stash popçünkü bu üst kısmı uygulayacak stash@{0}ve zuladan kaldıracaktır.

Ancak, eğer dalda ImproveReadmeiseniz, önce 1. zulayı uygulamalı git stash apply stash@{1}ve ardından 1. zulayı yığından kaldırmalısınız git stash drop stash@{1}.

Bu kadar!

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.