वर्तमान में स्वीकार जवाब तकनीकी रूप से सही है, तो आप सीधे एक दूरदराज के लिए अपने सभी stashes पुश करने के लिए Git नहीं बता सकता, और उसके बाद किसी अन्य कंप्यूटर पर अपने स्थानीय stashes में सब कुछ खींच।
और जबकि वर्तमान में टॉप-अपवॉट किए गए उत्तर को काम करना चाहिए, मुझे यह पसंद नहीं आया कि यह अस्थायी शाखाओं का एक गुच्छा बनाता है, और इसके लिए इसे मैन्युअल रूप से स्टैस कमिट की जाँच करनी चाहिए और इसे स्टैश के रूप में सहेजना चाहिए, जिससे इस टिप्पणी जैसे मुद्दे पैदा हो सकते हैं। उल्लेख किया और एक डुप्लिकेट की ओर जाता है On (no branch): On testing:
। निश्चित रूप से एक बेहतर तरीका होना चाहिए!
जब आप सीधे स्ट्रैस को धक्का नहीं दे सकते हैं, तो एक स्टैश सिर्फ एक कमिट (वास्तव में दो कमिट्स) है, और उस git push
मैन पेज के अनुसार आप पुश कर सकते हैं:
<src>
अक्सर शाखा आप पुश करने के लिए चाहते हो जाएगा का नाम है, लेकिन यह किसी भी मनमाने ढंग से "SHA-1 अभिव्यक्ति" हो सकता है ...
मैंने स्टैचेज़ को आगे बढ़ाने के लिए चुना refs/stashes/*
ताकि मैं अतिरिक्त शाखाओं के साथ अपने रिमोट को अव्यवस्थित न कर सकूं। इसलिए मैं ऐसा कर सकता हूं:
git push origin stash@{0}:refs/stashes/$(git rev-parse --short stash@{0})
( rev-parse
कमांड को स्टैश का शॉर्ट हैश मिलता है, जो रेपो के लिए अद्वितीय होगा।)
अगला, मुझे दूसरे कंप्यूटर से स्टैश लाने की जरूरत है। Git केवल डिफ़ॉल्ट रूप से शाखाएँ लाती है, इसलिए मुझे विशेष रूप से स्टैच लाने की आवश्यकता है:
git fetch origin refs/stashes/*:refs/stashes/*
अब स्टैश कमिट को वास्तविक स्टेश में बदलने के लिए। जैसा कि उल्लेख किया गया है, जबकि मैं बस स्टैस कमिट, रीसेट, और हमेशा की तरह जांच कर सकता था, मुझे यह पसंद नहीं है कि इसके लिए अतिरिक्त चरणों की आवश्यकता हो, या यह हो सकता है कि यह स्टैश के लिए सूचकांक स्थिति को बनाए न रखे। मैं स्वचालित रूप से ऐसा करने के लिए ऑनलाइन देख रहा था, लेकिन मेरे खोज-फू ने मुझे विफल कर दिया। अंत में मैंने मैन पेज के लिए देखाgit stash
, जहाँ मुझे यह मिला:
सृजन करना
a stash (जो एक रेग्युलर कमिट ऑब्जेक्ट है) बनाएँ और रेफ नेमस्पेस में कहीं भी स्टोर किए बिना, उसका ऑब्जेक्ट नाम वापस करें। यह स्क्रिप्ट के लिए उपयोगी माना जाता है। यह संभवतः वह कमांड नहीं है जिसका आप उपयोग करना चाहते हैं; ऊपर "सहेजें" देखें।
दुकान
स्टोर किए गए रीट को अपडेट करते हुए, git stash create (जो कि एक झूलता हुआ मर्ज कमिट है) के माध्यम से दिया गया स्टोर करें। यह स्क्रिप्ट के लिए उपयोगी माना जाता है। यह संभवतः वह कमांड नहीं है जिसका आप उपयोग करना चाहते हैं; ऊपर "सहेजें" देखें।
चूंकि मेरे पास पहले से ही कमिटमेंट है, इसलिए store
लगता है कि मुझे क्या चाहिए। तो मैं कर सकता हूँ:
git stash store --message "$(git show --no-patch --format=format:%s <SHA>)" <SHA>
की जगह <SHA>
साथ जो अभी-अभी आया था।
( git show
कमांड को स्टैश कमेट से मैसेज मिलता है, स्टैश लॉग के संदेश के रूप में उपयोग करने के लिए।)
मेरे स्थानीय रेपो में अब यह स्थिति सामान्य दिखती है:
$ git stash list
stash@{0}: On master: temp
...
रिमोट को साफ करने के लिए, स्टैम्स को रिमोट से हटाया जा सकता है जैसे:
git push origin :refs/stashes/<SHA>
इस पद्धति का भी लाभकारी होने का लाभ है: यदि आप push
फिर से कमांड चलाते हैं , तो यह रिपोर्ट करेगा Everything up-to-date
। fetch
आदेश भी सुरक्षित रूप से बार-बार चलाया जा सकता है। हालांकि stash store
यदि यह हाल ही के सबसे अधिक स्लैश के समान है, तो स्टैश को स्टोर करना छोड़ देगा, यह पुराने स्टैच के डुप्लिकेट को नहीं रोकता है। यह चारों ओर काम किया जा सकता है, जैसा कि मैं अपनी git-rstash
स्क्रिप्ट में करता हूं , नीचे देखें।
पूरा करने के लिए, आप आसानी से सभी स्टैड्स को धक्का दे सकते हैं (साथ में) दे घुमा के):
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
या सभी लाए गए आयातों को आयात करें:
for stash in $(ls .git/refs/stashes)
do
git stash store --message "$(git show --no-patch --format=format:%s $stash)" $stash
done
मैंने एक बनाया है दे घुमा केस्क्रिप्ट जिसे एक सबकमांड (उदा git rstash push 0
) के रूप में कहा जा सकता है, इसलिए मुझे यह सब याद रखने की ज़रूरत नहीं है। git-rstash
यहाँ पाया जा सकता है।
git fetch some-remote +refs/stash:refs/remotes/some-remote/stash
git stash apply some-remote/stash