Yanıtlar:
On git zula manpage o (sadece "Seçenekler" açıklaması sonrasında, "Tartışma" bölümünde) okuyabilir:
Stash, ağacı çalışma dizininin durumunu kaydeden bir taahhüt olarak temsil edilir ve ilk üst öğesi, stash oluşturulduğunda HEAD'deki taahhüttür.
Böylece stash'ı (örneğin stash@{0}
ilk / en üstteki stash) birleştirme taahhüdü olarak ele alabilir ve kullanabilirsiniz:
$ git diff stash@{0}^1 stash@{0} -- <filename>
Açıklama: stash@{0}^1
Yukarıdaki açıklamada belirtildiği gibi, değişikliklerin saklandığı taahhüt olan söz konusu zuvanın ilk ebeveyni anlamına gelir. Bu "git diff" (iki taahhütlü) biçimini kullanıyoruz, çünkü stash@{0}
/ refs/stash
bir birleştirme taahhüdüdür ve git'e hangi ebeveyne karşı bakmak istediğimizi söylemek zorundayız. Daha şifreli:
$ git diff stash@{0}^! -- <filename>
ayrıca çalışmalıdır ( "Aralıkları belirleme" bölümünde sözdiziminin açıklaması için git rev-ayrıştırma kılavuz sayfasına rev^!
bakınız).
Aynı şekilde, depodan tek bir dosyayı kontrol etmek için git checkout'u kullanabilirsiniz :
$ git checkout stash@{0} -- <filename>
veya başka bir dosya adı altında kaydetmek için:
$ git show stash@{0}:<full filename> > <newfile>
veya
$ git show stash@{0}:./<relative filename> > <newfile>
( Not burada o <tam dosya> bir projenin üst dizine bir dosya göreli tam yol adı (düşünmek: göreceli stash@{0}
)).
stash@{0}
Kabuk genişlemesinden korunmanız gerekebilir , yani "stash@{0}"
veya kullanın 'stash@{0}'
.
git checkout
adam sayfasıydı. Dosyayı başka bir konuma bırakamaz. Buna bir referans var: stackoverflow.com/questions/888414/…
git checkout
Yaklaşımın tam dosyayı stash'tan kopyaladığını unutmayın - onu çalışma dizininizdeki gibi birleştirmez git stash apply
. (Bu nedenle, saklamanın oluşturulduğu tabandan herhangi bir değişiklik yaparsanız kaybolurlar).
git stash apply
dosya saklanmış beri iş ağacında modifiye edilmiş bir dosyada değişiklik birleştirmek için, iş ağacında o dosya sahnelenecek gerekir. Otomatik birleştirmenin çalışması için, aynı dosyalar hem çalışan kopyada hem de birleştirilecek saklanan kopyada değiştirilemez. Son olarak, stash uygula öğeyi stash'tan olduğu gibi kaldırmaz git stash pop
.
Bunun git stash apply
yerine kullanırsanız git stash pop
, bu zulayı çalışma ağacınıza uygular, ancak yine de zulayı saklar.
Bunu yaptıktan sonra, istediğiniz dosyayı add
/ commit
daha sonra kalan değişiklikleri sıfırlayabilirsiniz.
git stash pop stash@{0}
: (liste saklanmış değişiklikler git stash list
)
Zımbalar da dahil olmak üzere herhangi bir şubeden değişiklik almanın kolay bir yolu vardır:
$ git checkout --patch stash@{0} path/to/file
Birçok parçaya yama eklemek istiyorsanız dosya özelliklerini atlayabilirsiniz. Veya tek bir dosyadaki tüm değişiklikleri almak için yamayı (ancak yolu değil) atlayın. Birden fazla 0
numaranız git stash list
varsa, içindeki stash numarasıyla değiştirin . Bunun gibi olduğunu ve dallar arasındaki tüm farklılıkların diff
uygulanmasını önerdiğini unutmayın. Yalnızca tek bir taahhütten / stash'dan değişiklik almak için bir göz atın .git cherry-pick --no-commit
git help checkout
. --patch
etkileşimli birleştirme yapar, Kabukta onayladığınız iri parça (lar) ı (veya e
yamayı ditlemeyi seçerseniz kaydettiğiniz her şeyi) uygular . Yazdığım gibi, "Yol tek başına" dosyanın üzerine yazacaktır.
git config --global alias.applydiffat '!git checkout --patch "$1" -- $(git diff --name-only "$1"^ "$1")'
- daha sonra git applydiffat stash@{4}
sadece stash ve üst öğesi arasında değişen dosyaları kullanır.
Dosyanın tamamını görmek için: git show stash@{0}:<filename>
Farkı görmek için: git diff stash@{0}^1 stash@{0} -- <filename>
diff
ile değiştirebilirsiniz difftool
.
$ git checkout stash@{0} -- <filename>
Notlar:
"-" ve dosya adı parametresinden sonra boşluk bıraktığınızdan emin olun
Sıfır (0) yerine özel saklama numaranızı yazın. Saklama listesi almak için şunu kullanın:
git stash list
Jakub Narębski'nin cevabına dayanarak - Daha kısa versiyon
" git show stash@{0}
" (Veya stash sayısı ne olursa olsun; bkz. "Git stash list"). Tek bir dosya için fark bölümünü çıkarmak kolaydır.
git show stash
en üstte saklamak için kullanın (normalde sahip olduğunuz tek tanesini). Benzer şekilde, mevcut dalınız ile stash arasındaki farkı gösterebilirsiniz git diff head stash
.
Anlamak için en basit kavram, belki de en iyisi olmasa da, üç dosyanızın değişmiş olması ve bir dosyayı saklamak istemenizdir.
Hepsini git stash
saklamak için yaparsanız , git stash apply
tekrar ve sonra git checkout f.c
söz konusu dosyada etkin bir şekilde sıfırlamak için geri getirin.
Bu dosyanın çalışmasını kaldırmak istediğinizde, farkını yığın yığınından temizlemeyen gerçeğin avantajını kullanarak bir yapın git reset --hard
ve git stash apply
tekrar çalıştırın git stash apply
.
Stashed dosyalarının geçerli sürümle birleştirilmesi gerekiyorsa, diff kullanarak önceki yolları kullanın. Aksi takdirde , dosyaların git pop
taslağını kaldırmak, git add fileWantToKeep
dosyanızı sahnelemek ve git stash save --keep-index
sahnede olanlar dışında her şeyi saklamak için kullanabilirsiniz. Bu yolun öncekilerle olan farkının dosyayı saklamaktan "çıkarması" olduğunu unutmayın. Önceki cevaplar git checkout stash@{0} -- <filename>
, ihtiyaçlarınıza göre devam etmesini sağlar .
Değişiklikleri stash içindeki bir dosyaya çalışma ağacınıza uygulamak için aşağıdakileri kullanın.
git diff stash^! -- <filename> | git apply
Bu genellikle kullanmaktan daha iyidir, git checkout
çünkü stash'ı oluşturduğunuzdan beri dosyada yaptığınız değişiklikleri kaybetmezsiniz.
Kullanım Git Stash uzantı Visual Studio Kanunu