मैंने अपने परिवर्तनों को रोक दिया। अब मैं केवल कुछ फ़ाइलों को स्टैश से अनस्टैश करना चाहता हूं। मैं यह कैसे कर सकता हूँ?
मैंने अपने परिवर्तनों को रोक दिया। अब मैं केवल कुछ फ़ाइलों को स्टैश से अनस्टैश करना चाहता हूं। मैं यह कैसे कर सकता हूँ?
जवाबों:
के रूप में नीचे वर्णित है, और में विस्तृत " मैं एक git छिपाने की जगह से एक एकल फाइल (या एक फ़ाइल में परिवर्तन) कैसे निकाल सकते हैं? ", तो आप उपयोग आवेदन कर सकते हैं git checkoutया git showएक विशिष्ट फ़ाइल को पुनर्स्थापित करने के लिए।
git checkout stash@{0} -- <filename>
यह अधिलेखित करता है filename: सुनिश्चित करें कि आपके पास स्थानीय संशोधन नहीं थे, या आप इसके बजाय स्टैक्ड फ़ाइल को मर्ज करना चाह सकते हैं ।
(के रूप में टिप्पणी की द्वारा जैमे एम , tcsh जहां विशेष वर्ण से बचें करने की जरूरत है जैसे कुछ खोल के लिए, वाक्य रचना होगा: git checkout 'stash@{0}' -- <filename>)
या इसे किसी अन्य फ़ाइलनाम के तहत सहेजने के लिए:
git show stash@{0}:<full filename> > <newfile>
(ध्यान दें कि
<full filename>किसी प्रोजेक्ट की शीर्ष निर्देशिका के सापेक्ष फ़ाइल का पूर्ण पथनाम है (विचार करें: सापेक्षstash@{0}))।
टिप्पणी में पता चलता है :
यदि आप मैन्युअल रूप से चयन करना चाहते हैं कि आप उस फ़ाइल से कौन सा परिवर्तन लागू करना चाहते हैं:
git difftool stash@{0}..HEAD -- <filename>
विवेक टिप्पणी में कहते हैं :
ऐसा लगता है कि "
git checkout stash@{0} -- <filename>" फ़ाइल के संस्करण को उस समय के रूप में पुनर्स्थापित करता है जब स्टैश किया गया था - यह उस फ़ाइल के लिए परिवर्तित किए गए परिवर्तनों को लागू नहीं करता है ।
बाद करने के लिए:
git diff stash@{0}^1 stash@{0} -- <filename> | git apply
(जैसा कि peterflynn ने टिप्पणी की है , आपको कुछ मामलों में, एक को हटाने की आवश्यकता हो सकती है ) ( पारंपरिक अंतरों से प्रमुख स्लैश)| git apply -p1p1
जैसा कि टिप्पणी की गई: "अस्थिर" ( git stash pop), फिर:
git add)git stash --keep-indexअंतिम बिंदु वह है जो आपको दूसरों को चुराते हुए कुछ फ़ाइल रखने की अनुमति देता है।
यह सचित्र है कि " कई फाइलों में से केवल एक फाइल को कैसे स्टेश करें जो बदल गई है "।
git stash popफ़ाइल विरोध के कारण नहीं कर सकते हैं तो यह काम नहीं करता है । बालमुरुगन ए के जवाब ने उस मामले में मेरे लिए चाल चली।
unstashइसका मतलब है कि इसका मतलब है pop, जैसा कि मुझे लगता है कि यह ज्यादातर मामलों में होता है, यह केवल आंशिक रूप से सवाल का जवाब देता है। फिर आप बाद में होने वाले संघर्षों और / या भ्रम से बचने के लिए स्लेश से चुनिंदा रूप से लगाए गए टुकड़ों को कैसे हटा सकते हैं?
git checkout stash@{N} <File(s)/Folder(s) path>
उदाहरण के लिए। केवल ./test.c फ़ाइल को पुनर्स्थापित करने के लिए और। पिछले फ़ोल्डर से फ़ोल्डर को हटा दें,
git checkout stash@{0} ./test.c ./include
-aस्टैश बनाते समय ध्वज का इस्तेमाल किया था ।
मुझे लगता है कि VonC का जवाब शायद वही है जो आप चाहते हैं, लेकिन यहाँ एक चुनिंदा "git apply" करने का तरीका है:
git show stash@{0}:MyFile.txt > MyFile.txt
checkoutभी चीज़ की परवाह नहीं करती है ।
git show stash@`{0`}:Path/To/MyFile.txt |sc Path/To/MyFile.txt- PS के लिए विशेष रूप से ब्रेसिज़ की व्याख्या नहीं करने के लिए बैकस्टिक्स आवश्यक हैं, और scयह आवश्यक है क्योंकि PS का >ऑपरेटर UTF-16 (वास्तव में UCS-2) के लिए डिफॉल्ट करता है, जो शायद आप नहीं चाहते हैं। @ बालमुरुगन ए का जवाब इन मुद्दों से ग्रस्त नहीं है।
पहले सभी स्तंभों को सूचीबद्ध करें
git stash list
↓
stash@{0}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{1}: WIP on Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{2}: WIP on master: 7e450c81 Merge branch 'Offlineseite'
फिर दिखाओ कि कौन सी फाइलें स्टैश में हैं (स्लैश 1 लेने दें):
git stash show 1 --name-only
//Hint: you can also write
//git stash show stash@{1} --name-only
↓
ajax/product.php
ajax/productPrice.php
errors/Company/js/offlineMain.phtml
errors/Company/mage.php
errors/Company/page.phtml
js/konfigurator/konfigurator.js
फिर उस फ़ाइल को लागू करें जिसे आप पसंद करते हैं:
git checkout stash@{1} -- <filename>
या संपूर्ण फ़ोल्डर:
git checkout stash@{1} /errors
यह भी बिना काम करता है --लेकिन उनका उपयोग करने की सिफारिश की जाती है। इस पोस्ट को देखें ।
यह भी विकल्प व्याख्या को रोकने और शाब्दिक रूप से सभी निम्नलिखित तर्कों का इलाज करने के लिए एक संकेत के रूप में एक डबल हाइफ़न को पहचानने के लिए पारंपरिक है।
git stash popअनटैक की गई फ़ाइलों के लिए एक त्रुटि थी। धन्यवाद।
यदि आप git stash pop(बिना किसी विरोध के) इसे लागू करने के बाद स्टैश हटा देंगे। लेकिन अगर आप git stash applyइसे स्टैच लिस्ट से हटाए बिना पैच लगाएंगे। फिर आप अनचाहे परिवर्तनों के साथ वापस लौट सकते हैंgit checkout -- files...
git stash popऔर वहाँ टकराव हैं, तो आपको उन्हें मैन्युअल रूप से ठीक करना होगा और स्टैश को हटाया नहीं जाएगा।
एक और तरीका:
git diff stash@{N}^! -- path/to/file1 path/to/file2 | git apply -R
checkoutया showनेत्रहीन रूप से अधिलेखित कर देगा। "एक और तरीका" एक ख़ामोशी है।
path/to/file2आपके कार्यक्षेत्र में उसी फ़ाइल के विरुद्ध अंतर करना चाहता हूँ जैसा आप नहीं कर रहे हैं। दूसरा रास्ता छोड़कर मेरे लिए ठीक काम करता है। - और मुझे -Rविकल्प का उपयोग करके एक त्रुटि संदेश मिलता है ("रिवर्स में पैच लागू करें", धराशायी संस्करण को पैच करने की कोशिश कर रहा है?)। तो मेरा वर्किंग वर्जन जैसा दिखता है git diff stash@{N}^! -- path/to/file | git apply -।
...| git apply -3 -
विंडोज उपयोगकर्ताओं के लिए: PowerShell में घुंघराले ब्रेसिज़ का विशेष अर्थ है। आप या तो सिंगल कोट्स के साथ घेर सकते हैं या बैकटिक के साथ भाग सकते हैं। उदाहरण के लिए:
git checkout 'stash@{0}' YourFile
इसके बिना, आपको एक त्रुटि प्राप्त हो सकती है:
Unknown switch 'e'