2017-02-21 8 views
5
  • मैं अप्रतिबद्ध काम करता है बकाया हैं
  • मैं के रूप में प्रगति में मेरे वर्तमान कार्य पूरा नहीं हुआ है कुछ जरूरी काम
  • के लिए किसी अन्य शाखा में स्विच करना, मैं इसे प्रतिबद्ध करने के लिए नहीं करना चाहती। मैं इसे अलग करने के लिए git stash का उपयोग करता हूं।

इसके अतिरिक्त, मैं साझा ड्राइव पर उस स्टैश सामग्री का बैकअप लेना चाहता हूं। बस सुरक्षा के लिए। फ़ाइल पर स्टैश सामग्री संग्रहित करने के लिए एक सुरुचिपूर्ण समाधान क्या है?गिट स्टैश सामग्री का बैकअप कैसे लें?

उत्तर

9

आप शो आदेश चलाकर diff प्राप्त कर सकते हैं:

git stash show -p > stash.diff 

यह जो आप एक बैकअप के रूप में उपयोग कर सकते हैं diff फ़ाइल है।

git apply stash.diff 
# and potentially stash again: 
git stash 
+0

इससे मदद मिलती है !!!! – VinayVeluri

+0

@Zbynek 'git stash show 'केवल" MyProject/MyFile.scala | 34 +++++ "1 फ़ाइल बदल गई, 34 प्रविष्टियां (+)। यदि मैं इस "स्थिति रिपोर्ट" का बैकअप लेता हूं (जो आपके निर्देश के अनुसार stash.diff में कैप्चर किया गया है)। तो आइए मान लें कि बैकअप के बाद मेरी हार्ड ड्राइव में परेशानी है। Stash.diff को 34 लाइनों की वास्तविक सामग्री के बारे में पता है जो मैंने MyFile.scala फ़ाइल में लिखा था? – Polymerase

+0

@Polymerase: क्षमा करें, मुझे '-p' याद आया (जो' diff' के लिए डिफ़ॉल्ट है लेकिन 'stash' के लिए नहीं है)। उत्तर अपडेट किया गया। –

5

मैं प्रतिबद्ध करने के लिए दो करता (कभी कभी) तीन बनाकर यह

वास्तव में, git stash संचालित नहीं करना चाहती:

बाद में आप मौजूदा भंडार को diff आवेदन कर सकते हैं , इसलिए यदि आपने अपना काम छीन लिया है, तो आपने शायद इसे जानने के बिना भी किया है। लेकिन अस्थायी प्रतिबद्धता के साथ ज्यादातर समय गलत नहीं है। बस अपने वर्तमान काम जोड़ने के लिए, और उसके बाद एक अस्थायी प्रतिबद्ध के माध्यम से करते हैं:

git commit -m 'WIP' 

फिर, आप अपने शाखा भंडार के लिए बाहर धक्का कर सकते हैं, और कहा कि एक बैकअप के रूप में काम करना चाहिए। जब आप काम खत्म करने के लिए वापस, आप में संशोधन कर सकते हैं कि अस्थायी प्रतिबद्ध के माध्यम से:

git commit --amend 

अधिक सार्थक बनाने के लिहाज़ संदेश को बदलने के लिए स्वतंत्र महसूस, लेकिन किसी भी मामले में WIP संदेश एक चेतावनी के रूप में सेवा कर सकते हैं।

यदि आप जिस शाखा पर काम कर रहे हैं उसे दूसरों द्वारा साझा किया जा सकता है, तो आप बैकअप के रूप में अपनी शाखा को अस्थायी प्रतिबद्धता के साथ एक अलग स्थान पर धक्का दे सकते हैं, उदा।

git push origin local_branch:some_other_location 
+0

+1 'गिट प्रतिबद्ध --amend', @Tim के लिए +1, एक अस्थायी की तरह है जिसे ईमेल की तरह कुछ साझा किया जा सकता है और किसी अन्य मशीन पर लागू किया जा सकता है? – VinayVeluri

+0

@VinayVeluri अन्य उत्तर को देखें जो इसे संबोधित करने के लिए प्रतीत होता है। किसी भी मामले में, आप हमेशा शाखाएं साझा कर सकते हैं, इसलिए किसी भी अन्य प्रतिबद्धता के रूप में एक अस्थायी प्रतिबद्धता साझा की जा सकती है। –

+0

गॉचा, यह वही है जो हम आम तौर पर करते हैं, यह जांचते हुए कि क्या हमारे पास दूसरा तरीका है। – VinayVeluri

2

Tim Biegeleisen के रूप में कहा, git stash वास्तव में बनाता है एक प्रतिबद्ध - यह बस के चारों ओर अपने शाखाओं में से किसी के लिए कदम नहीं करता है।

आप (दूसरा [email protected]{1} के माध्यम से पिछले, आदि ... git stash list आप क्या उपयोग कर सकते हैं की एक पूरी सूची देखने के लिए) [email protected]{0} के माध्यम से अपने पिछले स्टैश सामग्री का उपयोग कर सकते हैं।

सबसे सीधा रास्ता नहीं मैं एक गुप्त कोष में अधिक स्थायी बनाने देखना है: एक नई शाखा बनाने के लिए: एक शाखा यह पर इशारा करते हुए के साथ अब

$ git branch wip/adding/new/feature [email protected]{0} 

,, इस रखे सामग्री समाप्त नहीं होगी, जब प्रसारित किया जाएगा आप इस रेपो, आदि से क्लोन या लाओ ...

सबसे आसान तरीका है बैकअप के लिए एक रेपो यह क्लोन करने के लिए है:

$ cd path/to/external/drive 
$ git clone my/repo 

# you can then update your backup by running : 
$ git fetch   # from the clone 

इस सभी शाखाओं और टैग अपने मूल रेपो में परिभाषित बचत होगी।

+0

धन्यवाद लेकिन यह एक छोटी अवधि के लिए अस्थायी काम को बचाने के लिए ओवरकिल है। स्टैश सामग्री 1K हो सकती है। एक पूरे रेपो का समर्थन करना 1 मिलियन गुना बड़ा हो सकता है। मेरे नौसिखिया तरीके के लिए खेद है, लेकिन मुझे लगता है कि यह अभी भी मेरे अस्थायी काम को करने के लिए आसान है और बाद में इसे पूर्ववत करें। – Polymerase

संबंधित मुद्दे