आसान सवाल का आसान जवाब है git stash apply
बस उस शाखा की जाँच करें जिस पर आप अपने परिवर्तन चाहते हैं, और फिर git stash apply। फिर git diffपरिणाम देखने के लिए उपयोग करें।
आपके द्वारा अपने बदलावों के साथ किए जाने के बाद- applyअच्छा लग रहा है और आपको यकीन है कि आपको किसी और को छिपाने की ज़रूरत नहीं है - फिरgit stash drop इसे हटाने के लिए उपयोग करें।
मैं हमेशा के git stash applyबजाय का उपयोग करने का सुझाव देता हूं git stash pop। अंतर यह है कि applyआसान के पुनः प्रयास के लिए apply, या देखने के लिए, इत्यादि के बारे में स्टेश को चारों ओर छोड़ देता है । यदि popस्टैश को निकालने में सक्षम है, तो यह तुरंत भी dropहो जाएगा, और यदि आपको अचानक पता चलता है कि आप इसे कहीं बाहर निकालना चाहते थे अन्य (एक अलग शाखा में), या साथ --index, या कुछ ऐसे, जो इतना आसान नहीं है। यदि आप apply, आप चुनते हैं कि कब करना है drop।
यह सब बहुत मामूली है एक रास्ता या दूसरा, और नौसिखिया के लिए यह एक ही होना चाहिए। (और आप इस सब को छोड़ सकते हैं!)
यदि आप अधिक उन्नत या अधिक जटिल सामान कर रहे हैं तो क्या होगा?
कम से कम तीन या चार अलग-अलग "गिट स्टैश का उपयोग करने के तरीके" हैं, जैसा कि यह था। ऊपर "रास्ता 1" के लिए है, "आसान तरीका":
आपने एक साफ़ शाखा से शुरुआत की, कुछ परिवर्तनों पर काम कर रहे थे, और तब महसूस किया कि आप उन्हें गलत शाखा में कर रहे हैं। आप बस अपने द्वारा अभी किए गए परिवर्तनों को लेना चाहते हैं और उन्हें दूसरी शाखा में "स्थानांतरित" करना चाहते हैं।
यह आसान मामला है, ऊपर वर्णित है। भागो git stash save(या सादे git stash, एक ही बात)। दूसरी शाखा देखें और उपयोग करें git stash apply। यह आपके पहले के परिवर्तनों में विलय करने के लिए गिट हो जाता है, git के शक्तिशाली मर्ज तंत्र का उपयोग करके। यदि आप उन्हें पसंद करते हैं, तो परिणामों को सावधानीपूर्वक (साथ में git diff) देखें और यदि आप ऐसा करते हैं, git stash dropतो स्टैश को छोड़ने के लिए उपयोग करें। हो गया!
आपने कुछ बदलाव शुरू किए और उन्हें प्रभावित किया। फिर आप दूसरी शाखा में चले गए और अधिक परिवर्तन शुरू कर दिए, यह भूल गए कि आपके पास स्टैक्ड हैं।
अब आप रखना चाहते हैं, या यहां तक कि इन बदलावों को भी आगे बढ़ाना चाहते हैं , और अपने स्टैश को भी लागू करना चाहते हैं।
आप वास्तव में git stash saveफिर से कर सकते हैं , जैसा git stashकि परिवर्तनों का "स्टैक" करता है। यदि आप ऐसा करते हैं कि आपके पास दो झड़पें हैं, तो बस एक-जिसे stashआप बुला सकते हैं - आप stash@{0}एक वर्तनी भी लिख सकते हैं stash@{1}। git stash listउन सभी को देखने के लिए (किसी भी समय) का उपयोग करें । सबसे नया हमेशा सबसे कम संख्या वाला होता है। जब आप git stash drop, यह सबसे नया गिरता है, और वह stash@{1}जो स्टैक के शीर्ष पर ले जाता है। यदि आपके पास और भी था , तो वह stash@{2}बन गया stash@{1}, और इसी तरह।
आप कर सकते हैं applyऔर फिर dropएक विशिष्ट छिपाने की जगह भी: git stash apply stash@{2}और इतने पर। एक विशिष्ट गति को छोड़ना, केवल उच्च-क्रम वाले लोगों को पुन: लोड करता है। फिर, बिना नंबर वाला भी है stash@{0}।
यदि आप बहुत सारी चोरी करते हैं, तो यह काफी गन्दा हो सकता है (जैसा मैं चाहता था stash@{7}या stash@{4}वैसा ही था या नहीं । रुकिए, मैंने अभी एक और धक्का दिया है, अब वे 8 और 5 हैं?)। मैं व्यक्तिगत रूप से इन परिवर्तनों को एक नई शाखा में स्थानांतरित करना पसंद करता हूं, क्योंकि शाखाओं के नाम हैं, और cleanup-attempt-in-Decemberमेरे लिए बहुत अधिक है stash@{12}। ( git stashकमांड एक वैकल्पिक सेव-मैसेज लेता है, और वे मदद कर सकते हैं, लेकिन किसी भी तरह, मेरे सभी स्टैड्स केवल नाम को हवा देते हैं WIP on branch।)
(अतिरिक्त-उन्नत) चलाने से पहले आपने अपने कोड का उपयोग किया है git stash save -p, या ध्यान से- git addऔर / या- git rmविशिष्ट विशिष्ट बिट्स git stash save। स्टैक्ड इंडेक्स / स्टेजिंग क्षेत्र में आपका एक संस्करण था, और काम करने वाले पेड़ में एक और (अलग) संस्करण था। आप यह सब संरक्षित करना चाहते हैं। तो अब आप उपयोग करते हैं git stash apply --index, और यह कभी-कभी विफल होता है:
Conflicts in index. Try without --index.
आप git stash save --keep-index"क्या प्रतिबद्ध होगा" का परीक्षण करने के लिए उपयोग कर रहे हैं । यह एक इस उत्तर के दायरे से परे है; इसके बजाय यह अन्य StackOverflow उत्तर देखें ।
जटिल मामलों के लिए, मैं आपको पहले "क्लीन" वर्किंग डायरेक्टरी में शुरू करने की सलाह देता हूं, अब आपके द्वारा किए गए किसी भी बदलाव पर (यदि आप चाहें तो नई ब्रांच पर)। इस तरह से "कहीं" जो आप उन्हें लागू कर रहे हैं, उसमें और कुछ नहीं है, और आप बस धराशायी परिवर्तनों की कोशिश कर रहे होंगे:
git status # see if there's anything you need to commit
# uh oh, there is - let's put it on a new temp branch
git checkout -b temp # create new temp branch to save stuff
git add ... # add (and/or remove) stuff as needed
git commit # save first set of changes
अब आप एक "साफ" शुरुआती बिंदु पर हैं। या शायद यह इस तरह से अधिक हो जाता है:
git status # see if there's anything you need to commit
# status says "nothing to commit"
git checkout -b temp # optional: create new branch for "apply"
git stash apply # apply stashed changes; see below about --index
याद करने के लिए मुख्य बात "गुप्त कोष" वह यह है कि है एक प्रतिबद्ध, यह सिर्फ एक थोड़ा है "अजीब / अजीब" के लिए प्रतिबद्ध है कि "एक शाखा पर" नहीं है। applyक्या बदल प्रतिबद्ध पर आपरेशन दिखता है, और कोशिश करता यह दोहराने के लिए भी आप अब कर रहे हैं। यह स्टैश अब भी रहेगा ( applyइसे इधर-उधर रखा जाता है), इसलिए आप इसे और देख सकते हैं, या यह तय कर सकते हैं कि यह गलत जगह है applyऔर फिर से अलग-अलग या जो भी कोशिश करें।
किसी भी समय आपके पास एक स्टैश होता है, आप स्लैश git stash show -pमें क्या है का सरलीकृत संस्करण देखने के लिए उपयोग कर सकते हैं । (यह सरलीकृत संस्करण केवल "अंतिम कार्य ट्री" परिवर्तनों पर दिखता है, न कि सहेजे गए अनुक्रमणिका परिवर्तन जो --indexअलग से पुनर्स्थापित होते हैं।) कमांड git stash apply, बिना --index, बस आपके कार्य-निर्देशिका में उन्हीं परिवर्तनों को करने की कोशिश करता है ।
यह सच है भले ही आपके पास पहले से ही कुछ बदलाव हों। applyआदेश एक करने के लिए एक गुप्त कोष में लागू करने के लिए खुश है संशोधित (यह लागू करने के लिए प्रयास करने के लिए या कम से कम,) कार्यशील निर्देशिका। उदाहरण के लिए, आप यह कर सकते हैं:
git stash apply stash # apply top of stash stack
git stash apply stash@{1} # and mix in next stash stack entry too
आप यहां "लागू करें" ऑर्डर चुन सकते हैं, विशेष क्रम में आवेदन करने के लिए विशेष स्टैड्स निकाल सकते हैं। हालांकि, ध्यान दें कि हर बार जब आप मूल रूप से "गिट मर्ज" कर रहे होते हैं, और मर्ज प्रलेखन के रूप में चेतावनी देता है:
गैर-तुच्छ अप्रयुक्त परिवर्तनों के साथ रनिंग गिट मर्ज हतोत्साहित किया जाता है: जबकि संभव हो, यह आपको एक ऐसी स्थिति में छोड़ सकता है जो संघर्ष के मामले में वापस करना मुश्किल है।
यदि आप एक साफ निर्देशिका के साथ शुरू करते हैं और सिर्फ कई git applyऑपरेशन कर रहे हैं , तो यह वापस करना आसान है: git reset --hardस्वच्छ राज्य में वापस आने के लिए उपयोग करें, और अपने applyऑपरेशन को बदलें । (यही कारण है कि मैं इन जटिल मामलों के लिए पहले एक साफ काम करने वाली निर्देशिका में शुरू करने की सलाह देता हूं।)
सबसे खराब संभव मामले के बारे में क्या?
मान लीजिए कि आप बहुत सारे एडवांस गिट स्टफ कर रहे हैं, और आपने एक स्टैश बनाया है, और चाहते हैं git stash apply --index, लेकिन सहेजे गए स्टैश को लागू करना संभव नहीं है --index, क्योंकि आपके द्वारा सहेजे जाने के समय से ही शाखा बहुत अधिक बदल गई है।
यह वही git stash branchहै जिसके लिए है
अगर तुम:
- बाहर की जाँच सही प्रतिबद्ध आप पर जब आप मूल किया थे
stash, तो
- एक नई शाखा बनाएँ, और अंत में
git stash apply --index
परिवर्तनों को फिर से बनाने का प्रयास निश्चित रूप से काम करेगा । ये क्या करता है (और यह तब से स्टैश को गिरा देता है क्योंकि इसे सफलतापूर्वक लागू किया गया था।)git stash branch newbranch
कुछ अंतिम शब्दों के बारे में --index(क्या बिल्ली है?)
--indexसमझाने के लिए क्या करना आसान है, लेकिन आंतरिक रूप से थोड़ा जटिल है:
- जब आपके पास परिवर्तन होते हैं, तो आपको आईएनजी
git addसे पहले उन्हें (या "स्टेज") करना होगा commit।
- इस प्रकार, जब आप भाग गया
git stash, तो आप हो सकता है दोनों फ़ाइलों को संपादित किया है fooऔर zorgहै, लेकिन केवल उन में से एक का मंचन किया।
- तो जब आप गुप्त कोष में वापस पाने के लिए पूछना, यह अच्छा हो सकता है अगर यह
git addहै addएड बातें करता है और नहीं git add गैर जोड़ा बातें। यही है, यदि आप addएड करते हैं, fooलेकिन zorgइससे पहले कि आप वापस नहीं करते हैं stash, तो यह ठीक है कि ठीक उसी सेटअप हो सकता है। क्या मंचन किया गया था, फिर से मंचन किया जाना चाहिए; क्या संशोधित किया गया था, लेकिन मंचन नहीं हुआ, फिर से संशोधित किया जाना चाहिए, लेकिन मंचन नहीं किया गया।
--indexकरने के लिए ध्वज applyइस तरह की स्थापना की बातें करने की कोशिश करता। यदि आपका कार्य-वृक्ष साफ है, तो यह आमतौर पर काम करता है। यदि आपके वर्क-ट्री में पहले से ही सामान addएड है, हालांकि, आप देख सकते हैं कि यहां कुछ समस्याएं कैसे हो सकती हैं। यदि आप बाहर निकलते हैं --index, तो applyऑपरेशन पूरे मंचित / अस्थिर सेटअप को संरक्षित करने का प्रयास नहीं करता है। इसके बजाय, यह सिर्फ "स्टैश बैग" में वर्क-ट्री कमिट का उपयोग करके गिट के मर्ज मशीनरी को आमंत्रित करता है । यदि आप मंचन / अस्थिरता को संरक्षित करने के बारे में परवाह नहीं करते हैं, तो बाहर जाना इसके काम को करने के --indexलिए बहुत आसान बनाता git stash applyहै।