जवाबों:
पर Git गुप्त कोष मैनपेज आप (, "चर्चा" खंड में बस के बाद "विकल्प" वर्णन) पढ़ सकते हैं कि:
एक स्टैश को एक कमिट के रूप में दर्शाया जाता है, जिसका पेड़ वर्किंग डायरेक्टरी की स्थिति को रिकॉर्ड करता है, और इसका पहला अभिभावक HEAD में कमिट होता है जब स्टैश बनाया गया था।
तो आप stash@{0}एक मर्ज कमिट के रूप में स्टैश का इलाज कर सकते हैं (जैसे पहला / सबसे ऊपरी स्लैश), और उपयोग करें:
$ git diff stash@{0}^1 stash@{0} -- <filename>
स्पष्टीकरण: का stash@{0}^1अर्थ है दिए गए स्टैश का पहला अभिभावक, जो कि ऊपर दिए गए स्पष्टीकरण में कहा गया है, वह वचन है, जिस पर बदलाव किए गए थे। हम "git diff" के इस रूप का उपयोग करते हैं (दो कमिट के साथ) क्योंकि stash@{0}/ refs/stashएक मर्ज कमिट है, और हमें git को बताना होगा कि हम किस माता-पिता के खिलाफ अलग होना चाहते हैं। अधिक गुप्त:
$ git diff stash@{0}^! -- <filename>
यह भी काम करना चाहिए ( "निर्दिष्ट सीमा" अनुभाग में, वाक्यविन्यास की व्याख्या के लिए git Rev-parse manpage देखें rev^!)।
इसी तरह, आप स्टैश में से किसी एक फाइल को चेक करने के लिए गिट चेकआउट का उपयोग कर सकते हैं :
$ git checkout stash@{0} -- <filename>
या इसे किसी अन्य फ़ाइलनाम के तहत सहेजने के लिए:
$ git show stash@{0}:<full filename> > <newfile>
या
$ git show stash@{0}:./<relative filename> > <newfile>
( ध्यान दें कि यहां <full filename> एक प्रोजेक्ट की शीर्ष निर्देशिका के सापेक्ष फ़ाइल का पूर्ण पथनाम है (विचार करें: सापेक्ष stash@{0}))।
आपको stash@{0}शेल विस्तार से उपयोग करने की आवश्यकता हो सकती है , अर्थात उपयोग "stash@{0}"या 'stash@{0}'।
git checkoutमैन पेज। यह फ़ाइल को किसी अन्य स्थान पर नहीं छोड़ सकता। इसमें एक संदर्भ है: stackoverflow.com/questions/888414/…
git checkoutदृष्टिकोण स्टैश से सटीक फ़ाइल को कॉपी करता है - यह इसे उस तरह से मर्ज नहीं करता है जो आपकी कार्यशील निर्देशिका में है git stash apply। (इसलिए यदि आपके पास आधार से किसी भी तरह का बदलाव हुआ है, तो वे नष्ट हो जाएंगे)।
git stash applyफ़ाइल के धराशायी होने के बाद से कार्य ट्री में संशोधित की गई फ़ाइल में परिवर्तनों को मर्ज करने के लिए , कार्य ट्री में उस फ़ाइल का मंचन किया जाना चाहिए। काम के लिए ऑटो-मर्ज के लिए, एक ही फाइल को काम की कॉपी और स्टैक्ड कॉपी-टू-मर्ज दोनों में संशोधित नहीं किया जा सकता है। अंत में, स्लैश लागू आइटम को स्टैच की तरह से नहीं हटाएगा git stash pop।
यदि आप git stash applyइसके बजाय उपयोग करते हैं git stash pop, तो यह आपके काम करने वाले पेड़ पर लगे हुए दाने को लागू करेगा लेकिन फिर भी यह दंश रख सकता है।
साथ यह किया है, तो आप कर सकते हैं add/ commitफ़ाइल आप चाहते हैं कि और फिर शेष बदलाव रीसेट।
git stash pop stash@{0}( git stash list
किसी भी शाखा से परिवर्तन प्राप्त करने का एक आसान तरीका है, जिसमें चोरी भी शामिल है:
$ git checkout --patch stash@{0} path/to/file
यदि आप कई भागों में पैच करना चाहते हैं, तो आप फ़ाइल युक्ति को छोड़ सकते हैं। या एकल फ़ाइल में सभी परिवर्तन प्राप्त करने के लिए पैच (लेकिन पथ नहीं) को छोड़ दें। यदि आपके पास एक से अधिक है, तो 0स्टैश नंबर से बदलें git stash list। ध्यान दें कि यह पसंद है diff, और शाखाओं के बीच सभी मतभेदों को लागू करने की पेशकश करता है । केवल एक कमिट / स्टेश से परिवर्तन प्राप्त करने के लिए, एक नज़र डालें git cherry-pick --no-commit।
git help checkout। --patchइंटरेक्टिव मर्जिंग करता है, यह शेल में आपके द्वारा स्वीकृत हंक (या यदि आप eपैच को चुनने के लिए जो कुछ भी बचाते हैं ) को लागू करते हैं। पथ अकेले फ़ाइल को अधिलेखित कर देगा, जैसे मैंने लिखा था, "सभी परिवर्तन"।
git config --global alias.applydiffat '!git checkout --patch "$1" -- $(git diff --name-only "$1"^ "$1")' - तब git applydiffat stash@{4}केवल स्टाॅस और उसके अभिभावक के बीच परिवर्तित हुई फाइलों का उपयोग किया जाता है।
पूरी फाइल देखने के लिए: git show stash@{0}:<filename>
अंतर देखने के लिए: git diff stash@{0}^1 stash@{0} -- <filename>
diffके साथ difftoolअपने पसंदीदा बाहरी diff उपयोग करने के लिए।
$ git checkout stash@{0} -- <filename>
टिप्पणियाँ:
सुनिश्चित करें कि आपने "-" और फ़ाइल नाम पैरामीटर के बाद स्थान रखा है
अपने विशिष्ट स्टैश नंबर के साथ शून्य (0) बदलें। स्टैश सूची पाने के लिए, उपयोग करें:
git stash list
जकुब नारबस्की के उत्तर पर आधारित - छोटा संस्करण
आप " git show stash@{0}" के साथ एक स्टाॅश के लिए अंतर प्राप्त कर सकते हैं (या जो भी स्टैश की संख्या है, "git stash list" देखें))। एकल फ़ाइल के लिए भिन्न के अनुभाग को निकालना आसान है।
git show stashसबसे ऊपरी दिखावा दिखाने के लिए उपयोग करें (आम तौर पर केवल एक ही आपके पास है)। इसी तरह आप अपनी वर्तमान शाखा के साथ अंतर को दिखा सकते हैं git diff head stash।
समझने के लिए सबसे सरल अवधारणा, हालांकि शायद सबसे अच्छा नहीं है, क्या आपके पास तीन फाइलें बदल गई हैं और आप एक फाइल को रोकना चाहते हैं।
यदि आप git stashउन सभी को छिपाने के लिए करते हैं, git stash applyतो उन्हें फिर से वापस लाने के लिए और फिर git checkout f.cफाइल में प्रभावी ढंग से रीसेट करने के लिए।
जब आप उस फ़ाइल को अनस्टैश करना चाहते हैं तो एक बार करें git reset --hardऔर फिर से रन git stash applyकरें, इस तथ्य का लाभ उठाते हुए कि स्टाॅक git stash applyस्टैक से अंतर स्पष्ट नहीं करता है।
यदि स्टैक्ड फ़ाइलों को वर्तमान संस्करण के साथ विलय करने की आवश्यकता होती है, तो अंतर का उपयोग करके पिछले तरीकों का उपयोग करें। अन्यथा आप git popउनका उपयोग न करने के लिए कर सकते हैं , git add fileWantToKeepआपकी फ़ाइल के मंचन के लिए, और git stash save --keep-indexमंच पर जो कुछ भी है, उसे छोड़कर सब कुछ करने के लिए। याद रखें कि पिछले वाले के साथ इस तरह का अंतर यह है कि यह फ़ाइल को स्टैश से "पॉप" करता है। पिछले उत्तर इसे बनाए रखते हैं git checkout stash@{0} -- <filename>इसलिए यह आपकी आवश्यकताओं के अनुसार चलता है।
अपने काम के पेड़ के लिए एक छिपाने की जगह में एक फ़ाइल में परिवर्तन लागू करने के लिए निम्नलिखित का उपयोग करें।
git diff stash^! -- <filename> | git apply
यह आम तौर पर उपयोग करने से बेहतर है git checkoutक्योंकि आप किसी भी बदलाव को खो नहीं सकते हैं क्योंकि आपने स्टैश बनाया था।
Visual Studio Code में Git Stash एक्सटेंशन का उपयोग करें