Değişikliklerimi sakladım. Şimdi sadece bazı dosyaları saklamak istiyorum. Bunu nasıl yapabilirim?
Değişikliklerimi sakladım. Şimdi sadece bazı dosyaları saklamak istiyorum. Bunu nasıl yapabilirim?
Yanıtlar:
Gibi aşağıda belirtilen ve ayrıntılı " nasıl bir git zulası gelen tek bir dosya (veya dosyada değişiklik) ayıklamak ki? ", Sen kullanımını uygulayabilir git checkout
veya git show
belirli bir dosyayı geri yüklemek için.
git checkout stash@{0} -- <filename>
Üzerine yazıyor filename
: Yerel değişikliklerin olmadığından emin olun, yoksa bunun yerine saklanan dosyayı birleştirmek isteyebilirsiniz .
( Jaime M. tarafından yorumlandığı gibi) , özel karakterler kaçış için gereken tcsh gibi bazı kabuk için, sözdizimi olacaktır: git checkout 'stash@{0}' -- <filename>
)
veya başka bir dosya adı altında kaydetmek için:
git show stash@{0}:<full filename> > <newfile>
(burada
<full filename>
, bir projenin en üst dizinine göre bir dosyanın tam yol adı olduğunu unutmayın (düşünmek: görestash@{0}
)).
YÜCER yorumlarda öneriyor :
Bu dosyadan hangi değişiklikleri uygulamak istediğinizi manuel olarak seçmek istiyorsanız:
git difftool stash@{0}..HEAD -- <filename>
Vivek ekler yorumlarda :
Gibi görünüyor "
git checkout stash@{0} -- <filename>
o yok -" zulası gerçekleştirildi zamanın olarak dosyanın sürümünü geri yükler DEĞİL bu dosya için (sadece) saklanmış değişiklikleri uygulamak.
İkincisini yapmak için:
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
olarak ( yorumladı tarafından peterflynn , ihtiyacınız olabilecek| git apply -p1
(Birini kaldırarak, bazı durumlarda p1
) geleneksel fark yolları önde gelen eğik çizgi)
Yorumlandığı gibi: "unstash" (git stash pop
), sonra:
git add
)git stash --keep-index
Son nokta, başkalarını saklarken bazı dosyaları tutmanıza izin veren şeydir.
" Değişen birden çok dosyadan yalnızca bir dosya nasıl saklanır " bölümünde gösterilmiştir .
git stash pop
Dosya çakışmaları nedeniyle yapamıyorsanız bu çalışmaz . Balamurugan A'nın cevabı bu durumda benim için hile yaptı.
unstash
araçlarını pop
buna büyük olasılıkla olur çoğu durumda, bu sadece kısmen sorusunu yanıtlar geliyor bana olarak. Daha sonra, kalan değişiklikleri patlatırken daha sonraki çakışmalardan ve / veya karışıklıklardan kaçınmak için seçici olarak uygulanan parçaları saklamaktan nasıl çıkarırsınız?
git checkout stash@{N} <File(s)/Folder(s) path>
Örneğin. Yalnızca ./test.c dosyasını ve ./include klasörünü son saklamadan geri yüklemek için,
git checkout stash@{0} ./test.c ./include
-a
ve zulayı oluştururken bayrak kullanmıştım .
Sanırım VonC'nin cevabı muhtemelen istediğiniz şeydir, ancak burada seçici bir "git uygula" yapmanın bir yolu var:
git show stash@{0}:MyFile.txt > MyFile.txt
checkout
şeye önem vermeyen bir dosyayı kopyalamak istedim .
git show stash@`{0`}:Path/To/MyFile.txt |sc Path/To/MyFile.txt
- PS'nin destekleri özel olarak yorumlamaması için backticks gereklidir ve sc
gereklidir, çünkü PS'nin >
operatörü varsayılan olarak istediğiniz şey olmayan UTF-16'yı (aslında UCS-2) kullanır . @ Balamurugan A'nın cevabı bu sorunlardan muzdarip değil.
İlk önce tüm depoları listeleyin
git stash list
↓
stash@{0}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{1}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{2}: WIP on master: 7e450c81 Merge branch 'Offlineseite'
Sonra hangi dosyaların zulada olduğunu gösterin (zu 1'i seçelim):
git stash show 1 --name-only
//Hint: you can also write
//git stash show stash@{1} --name-only
↓
ajax/product.php
ajax/productPrice.php
errors/Company/js/offlineMain.phtml
errors/Company/mage.php
errors/Company/page.phtml
js/konfigurator/konfigurator.js
Ardından, istediğiniz dosyayı uygulayın:
git checkout stash@{1} -- <filename>
veya tüm klasör:
git checkout stash@{1} /errors
Ayrıca olmadan çalışır --
ancak kullanılması önerilir. Bu gönderiye bakın .
Bir çift tireyi seçenek yorumlamasını durdurma sinyali olarak tanımak ve aşağıdaki tüm argümanları tam anlamıyla ele almak gelenekseldir.
git stash pop
İzlenmeyen dosyalar için hata veren bir sorunla karşılaştım . teşekkür ederim.
Siz git stash pop
(çakışma olmadan) uygulandıktan sonra zulayı kaldırır. Ama eğer git stash apply
yamayı istif listesinden çıkarmadan uygular. Ardından, istenmeyen değişiklikleri geri alabilirsiniz.git checkout -- files...
git stash pop
ve orada çakışmalar varsa, bunları manuel olarak düzeltmeniz gerekecek ve stash SİLİNMEZ.
Bir yol daha:
git diff stash@{N}^! -- path/to/file1 path/to/file2 | git apply -R
checkout
veya show
körü körüne sadece uygulayarak değişikliklerin yerine dosyanın üzerine olacaktır. "Bir yol daha" bir eksikliktir.
path/to/file2
alanınızdaki aynı dosyaya karşı istediğiniz gibi elde edemiyorum . İkinci yolu terk etmek benim için iyi. - Ve -R
seçeneği kullanarak bir hata mesajı alıyorum ("yama tersine uygula", saklanmış sürümü yama denemek ?!). Yani benim çalışma versiyonum benziyor git diff stash@{N}^! -- path/to/file | git apply -
.
...| git apply -3 -
Windows kullanıcıları için: kıvırcık parantezlerin PowerShell'de özel bir anlamı vardır. Tek tırnak işareti ile çevreleyebilir veya ters tırnakla kaçabilirsiniz. Örneğin:
git checkout 'stash@{0}' YourFile
Bu olmadan, bir hata alabilirsiniz:
Unknown switch 'e'