Git temelde tüm bir depo içeriğini ve dizini (ve bir veya birkaç dosyayı değil) yönetmekle ilgili olduğundan git stash
, şaşırtıcı bir şekilde,tüm çalışma diziniyle.
Aslında, Git 2.13'ten (Q2 2017) beri, dosyaları ayrı ayrı saklayabilirsiniz git stash push
:
git stash push [--] [<pathspec>...]
Ne zaman pathspec
'verilir git stash push
', yeni zulası sadece Bkz "pathspec eşleşen dosyalar için modifiye durumlarını kaydeder Stash özel dosyalara değiştirir daha".
Basitleştirilmiş örnek:
git stash push path/to/file
Bu özelliğin test durumu birkaç seçenek daha gösterir:
test_expect_success 'stash with multiple pathspec arguments' '
>foo &&
>bar &&
>extra &&
git add foo bar extra &&
git stash push -- foo bar &&
test_path_is_missing bar &&
test_path_is_missing foo &&
test_path_is_file extra &&
git stash pop &&
test_path_is_file foo &&
test_path_is_file bar &&
test_path_is_file extra
Orijinal cevap (aşağıda, Haziran 2010) saklamak istediğinizi manuel olarak seçmekti.
Casebash yorum:
Bu ( stash --patch
orijinal çözüm) güzel, ama çoğu zaman birçok dosyayı değiştirdim, bu yüzden yama kullanmak sinir bozucu
bukzor 'ın cevabı (upvoted, Kasım 2011) dayalı, daha pratik bir çözüm önerir
git add
+git stash --keep-index
.
Gidip resmi yanıtı olması gereken cevabını (benim değil) görün ve onaylayın.
Bu seçenek hakkında, chhh yorumlarda alternatif bir iş akışına dikkat çeker :
git reset --soft
net aşamalandırmayı geri almak için böyle bir saklamanın ardından " " yapmalısınız :
Orijinal duruma ulaşmak için - bu net bir aşamalandırma alanıdır ve yalnızca bazı aşamalı olmayan değişikliklerle, almak için dizini yumuşak bir şekilde sıfırlayabilir (olmadan sizin gibi bir şey - bukzor - yaptı)
(Orijinal cevap Haziran 2010: manuel saklama)
Yine de, git stash save --patch
peşinde olduğunuz kısmi depolamaya ulaşmanızı sağlar:
İle --patch
, HEAD ile saklanacak çalışma ağacı arasındaki farktan etkileşimli olarak seçim yapabilirsiniz.
Stash girdisi, dizin durumu deponuzun dizin durumu ile aynı olacak şekilde oluşturulur ve çalışma ağacı yalnızca etkileşimli olarak seçtiğiniz değişiklikleri içerir. Seçilen değişiklikler daha sonra çalışma ağacınızdan geri alınır.
Ancak bu, tam dizini (zaten dizine eklenmiş diğer dosyaları içerebileceği için istediğiniz şey olmayabilir) ve kısmi bir çalışma ağacını (saklamak istediğiniz dizine benzeyebilir) kaydeder.
git stash --patch --no-keep-index
daha uygun olabilir.
Eğer --patch
işe yaramazsa manuel bir işlem:
Bir veya birkaç dosya için, ara bir çözüm:
- onları Git repo'sunun dışında kopyala
(Aslında, eleotlecram ilginç bir alternatif öneriyor )
git stash
- onları geri kopyala
git stash
# bu sefer yalnızca istediğiniz dosyalar saklanıyor
git stash pop stash@{1}
# tüm dosya değişikliklerinizi yeniden uygulayın
git checkout -- afile
# herhangi bir yerel değişiklikten önce dosyayı HEAD içeriğine sıfırlayın
Bu oldukça zahmetli işlemin sonunda, yalnızca bir veya birkaç dosya saklanır.
git stash --keep-index
dizini tutar, ancak her şeyi dizinde saklar - hem dizinde hem de dışında.