git stash sürüm uygula


513

2 şubem var: usta | dizayn

Tasarımda çalışarak bir zulası yaptım ve ustaya geçtim, bazı ayarlamalar yaptım. Tasarıma geri döndüm ve stash applysadece tasarım dalındaki tüm değişikliklerimi kaybetmek için yaptım .

Bunları temizlemediğim veya silmediğim için tüm işlerimin bir saklamak içinde olduğunu umuyorum.

Bir stash listesi yaparsam 4 sonuç alırım:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Eğer git stash apply f2c0c72denersem bir hata alıyorum:

fatal: Needed a single revision
f2c0c72: no valid stashed state found

Belirli bir zulayı nasıl uygulayabilirim?


26
Şimdi (Q4 2016, Git 2.11) sözdizimine git stash apply 0(yerine git stash apply stash@{0}) sahip olduğunuzu unutmayın. Bkz burada cevabımı .
VonC

Yanıtlar:


838

Zulasının anahtarları aslında stash@{n}soldaki öğelerdir. O zaman dene:

git stash apply stash@{0}

(bazı kabuklarda "stash@{0}"zsh, balık ve powershell gibi alıntı yapmanız gerektiğini unutmayın ).

2.11 sürümünden bu yana oldukça kolay, kullanmak yerine N yığın numarasını kullanabilirsiniz stash@{n}. Şimdi kullanmak yerine:

git stash apply "stash@{n}"

Yazabilirsin:

git stash apply n

Zarfların listesini almak için:

git stash list

Aslında git'te stash@{0}geçiş yapabileceğiniz bir revizyon ... ancak git stash apply ...geçerli konumunuza uygulamak için DTRT'nin nasıl yapılacağını anlamanız gerekir.


90
Sadece bazı kabuklarda, stash @ {n} 'ın alıntılanması gerektiğini unutmayın.
Senjai

7
Başka bir ipucu: Örneğin gitk stash@{0}, belirli bir zurada yaptığınız değişiklikleri göstermek için yapabilirsiniz .
antinome

11
zsh kullanıcılarının çift alıntı gerekir örneğingit stash apply "stash@{0}"
mynameistechno

7
stash@{n}en garip komuttur. Bunu yapmak için kendi takma adınızı veya işlevinizi oluşturmaktan başka kısayol var mı?
Dylanthepiguy

2
git stash apply nhuzurlu
Victor

241

Bir saklamak uygulamak ve saklamak listesinden kaldırmak için şunu çalıştırın:

git stash pop stash@{n}

Bir zulası uygulamak ve zu önbellekte tutmak için şunu çalıştırın:

git stash apply stash@{n}

8
Bu harika, iki seçeneği birbirinden ayırdığınız için teşekkürler. Ben sadece bunu denedim ve şube-a şubesi-b üzerine bir zulası pop yaparsanız, zulası yine de saklı önbellekte kalacaktır. Sanırım bu, gelecekteki bir tarihte dal-a'ya stash uygulama / pop seçeneğine sahip olacaksınız. Gerçekten umarım mantıklı. Kullanışlı!
longda

42
PowerShell için:git stash pop "stash@{n}"
ankitjaininfo

1
PowerShell tırnak / tek tırnak sadece kıvırcık parantez ile mutlu:git stash apply stash@"{n}"
m1kael

PowerShell de kabul edecektir git stash apply stash@`{n`}(parantezlerden önceki geri işaretlere dikkat edin).
Ian Kemp

52

2.11 sürümünden bu yana, oldukça kolay, söylemek yerine N yığın numarasını kullanabilirsiniz "stash@{n}". Şimdi kullanmak yerine:

git stash apply "stash@{n}"

Yazabilirsin:

git stash apply n

Örneğin, listenizde:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Başvurmak stash@{1}isterseniz şunu yazabilirsiniz:

git stash apply 1

Aksi takdirde, 1.7.5.1'den beri dizininizde bazı değişiklikler olsa bile kullanabilirsiniz, ancak bir hata alırsanız stash'ın çalışma dizini değişikliklerinizin üzerine yazmayacağından emin olmalısınız:

error: Your local changes to the following files would be overwritten by merge:
        file
Please commit your changes or stash them before you merge.

1.7.5.1'den önceki sürümlerde, çalışma dizininde bir değişiklik olması durumunda çalışmayı reddetti.


Git sürüm notları:

Kullanıcı, stash'ın varsayılan konumuna tek bir öğe adlandırırken her zaman "stash @ {$ N}" demelidir, yani refs / stash içindeki reflogs. "Git stash" komutu "git stash Apply 4" ifadesini kısa bir el olarak kabul etmeyi öğrendi.

git stash uygulamak "değişiklik kaydedilen değişiklik ile çakışmasa bile, çalışma ağacında herhangi bir değişiklik olursa çalışmayı reddetmek için kullanılır


41

Biri bir Windows makinesinde ve PowerShell'de ise, aşağıdaki gibi bir argüman alıntılaması gerekir:

git stash apply "stash@{0}"

... veya değişiklikleri uygulamak ve saklamak için:

git stash pop "stash@{0}"

Aksi takdirde tırnak işaretleri olmadan bu hatayı alabilirsiniz:

fatal: belirsiz argüman 'stash @': bilinmeyen düzeltme veya çalışma ağacında olmayan yol.


Görünüşe göre bu, Mac OSX 10.11'de balık kabuğu kullanırken bunu yapmak zorundasınız.
lps

8
git stash list

ardından uygulanacak zulayı seçin ve yalnızca sayı kullanın:

git stash apply 1

2
Git Stash list 

Liste tüm depolanmış öğeleri gösterecektir, örneğin: stash @ {0} :, stash @ {1}:, .., stash @ {n}:

Sonra stash @ {n} 'i belirten n sayısını seçin:

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch
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.