Stash, temel işlem ile dizin arasındaki çalışma ağacının özel birleştirme işlemidir. Bir yol, her birini ayrı yamalar olarak kaydetmek, ilk üst ebeveynini kontrol etmek, dizini ve çalışma ağacını iki yamadan geri yüklemek ve son olarak saklamayı geri yüklemek olabilir (bir cevap bu şekilde gider).
Bu, saklanan tüm bilgileri tamamen yeniden oluşturmak için gereklidir ve eğer bunu umursamıyorsanız, çatışmaları önlemek ve saklamanın nerede oluşturulduğunu takip etmek için en azından saklamanın ilk ebeveynini kontrol etmelisiniz.
Tüm depoları bir repodan diğerine tamamen geri yüklemek için yaptığım şey bu. Bunları aynı bilgisayarda edemiyorsanız, stash etiketlerini oluşturduktan sonra bir pakete kaydedebilir ve refs listesini kopyalayıp hedef bilgisayara paketleyebilirsiniz.
Orijinal repo kökünden:
- Stash referanslarının listesini alın
- Git getirme ile alabilmeniz için saklamak referanslarınızı etiketleyin (etiket adları mater yok, bir çakışma varsa değiştirin.
stash_ + Mantıksal stash ref içindeki sayıları )
- Mantıksal referansları ters sırayla sha1 karmalarına dönüştürün - daha sonra kullanacağız
- Bu repo yolunu kaydedin - daha sonra için de
refs=$(git stash list|cut -d: -f1)
for ref in $refs; do tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD
Not: Bu, bash veya uyumlu kabuk gerektirir (ksh, zsh yapmalıdır ...) Ayrıca bir değişkeni artırabilirsiniz, örneğin stash_$((i++))kabuğunuz desteklemiyorsa${param//pattern}
Şimdi yeni repoda, her ref için:
- Eski repodan ref getir (etiket adlarını kullanmamıza bile gerek yok, çünkü onları etiketledik, git getirme ile alabiliriz)
- Bu ref'nin konusunu stash mesajı olarak kullanarak, stash'ı ref'den yeniden içe aktarın.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash saveartıkgit stash push