Şu anda kabul edilen cevap teknik olarak doğrudur, Git'e tüm saklamaklarınızı doğrudan bir uzaktan kumandaya itmesini ve ardından her şeyi başka bir bilgisayardaki yerel saklamaklarınıza çekmesini doğrudan söyleyemezsiniz.
Ederken şu anda üst upvoted cevap çalışmalıdır geçici dalları bir demet oluşturur ve elle zulası işlemek kontrol ve benzeri sorunlara yol açabilir bir stash, olarak kaydedilmesini gerektiriyorsa o böyle, ben yapmadım Bu yoruma bahsedilen ve bir yinelenen yol açar On (no branch): On testing:
. Elbette daha iyi bir yol olmalı!
Bu nedenle, doğrudan zulası itemezsiniz, ancak bir zulası sadece bir taahhüttür (aslında iki taahhüt) ve git push
man sayfası başına taahhütleri itebilirsiniz:
<src>
Sıklıkla itmek isteyeyim şube adıdır, ancak herhangi bir keyfi "SHA-1 ifadesi" olabilir ...
Zımbaları itmeyi seçtim, refs/stashes/*
böylece uzaktan kumandayı ekstra dallarla karıştırmayacağım. Böylece bunu yapabilirim:
git push origin stash@{0}:refs/stashes/$(git rev-parse --short stash@{0})
( rev-parse
Komut, depo için benzersiz olacak olan stash'ın kısa karmasını alır.)
Sonra, diğer bilgisayardan saklamak getirmem gerekiyor. Git sadece dalları varsayılan olarak getirir, bu nedenle özellikle stashes getirmeniz gerekir:
git fetch origin refs/stashes/*:refs/stashes/*
Şimdi saklamak yerine gerçek bir saklamak dönüştürmek. Belirtildiği gibi, her zamanki gibi saklamak, sıfırlamak ve saklamak kontrol ederken, fazladan adımlar gerektirdiğini veya saklamak için dizin durumunu koruyamayacağını sevmiyorum. Çevrimiçi olarak bunu otomatik olarak yapmanın bir yolunu arıyordum, ancak search-fu'm başarısız oldu. Sonunda ben git stash
buldum adam sayfası , baktım :
create
Ref (boş bir taahhüt nesnesi olan) bir stash oluşturun ve ref ad alanında herhangi bir yerde saklamadan nesne adını döndürün. Bunun komut dosyaları için yararlı olması amaçlanmıştır. Muhtemelen kullanmak istediğiniz komut değildir; yukarıdaki "kaydet" bölümüne bakın.
saklamak
Git stash create (sarkan birleştirme taahhüdü) aracılığıyla oluşturulan belirli bir zulayı saklamak için saklayın. Bunun komut dosyaları için yararlı olması amaçlanmıştır. Muhtemelen kullanmak istediğiniz komut değildir; yukarıdaki "kaydet" bölümüne bakın.
Taahhüdüm zaten olduğundan, store
istediğim gibi geliyor. Böylece yapabilirim:
git stash store --message "$(git show --no-patch --format=format:%s <SHA>)" <SHA>
<SHA>
Yeni getirilen sakla ile değiştirilmesi .
( git show
Komut, saklanma günlüğüne mesaj olarak kullanmak için saklama mesajını saklamak için alır.)
Stash artık yerel repoma normal geldi:
$ git stash list
stash@{0}: On master: temp
...
Uzaktan kumandayı temizlemek için zımbalar uzaktan kumandadan şu şekilde silinebilir:
git push origin :refs/stashes/<SHA>
Bu yöntem aynı zamanda idempotent olma avantajına sahiptir: push
komutu tekrar çalıştırırsanız rapor verecektir Everything up-to-date
. fetch
Komut ayrıca güvenle defalarca çalıştırılabilir. stash store
En son saklananla aynı ise saklamayı atlayacak olsa da , daha eski saklananların kopyalarını engellemez. Bu benim git-rstash
senaryomda yaptığım gibi , aşağıya bakın.
Tamamlamak için, tüm zulayı kolayca itebilirsiniz ( darbe):
for i in $(seq 0 $(expr $(git rev-list --walk-reflogs --count stash) - 1))
do
git push origin stash@{$i}:refs/stashes/$(git rev-parse --short stash@{$i})
done
veya getirilen tüm yığınları içe aktarın:
for stash in $(ls .git/refs/stashes)
do
git stash store --message "$(git show --no-patch --format=format:%s $stash)" $stash
done
Ben yarattım darbebir alt komut (örneğin git rstash push 0
) olarak adlandırılabilir komut dosyası bu yüzden tüm bunları hatırlamak zorunda değilsiniz. git-rstash
burada bulabilirsiniz.
git fetch some-remote +refs/stash:refs/remotes/some-remote/stash
git stash apply some-remote/stash