केवल एक फ़ाइल को स्‍टेश करें


175

मैं केवल एक फ़ाइल से परिवर्तनों को छिपाने में सक्षम होना चाहता हूं:

git stash save -- just_my_file.txt

हालांकि ऊपर काम नहीं करता है। कोई विकल्प?



के लिए एक फ़ाइल के बजाय करतब दिखाने गुप्त कोष में आदेश, बहुत आसान दृष्टिकोण कॉपी करने के लिए है एक फ़ाइल और जब आप करने के लिए इसे वापस लाना चाहते हैं बस मूल पर कॉपी। जैसे। cp just_my_file.txt just_my_file.txt.manualstash अब आप सभी चेकआउट और सामान कर सकते हैं और जैसा कि प्रतिलिपि "अनट्रैक फाइल" है, आप अपनी समस्याओं के बिना शाखाओं और कमानों में स्थानांतरित कर सकते हैं। जब आप सही शाखा पर हों / जहां आप एकल फ़ाइल को "मर्ज" करना चाहते हैं , तो बस करें mv just_my_file.txt.manualstash just_my_file.txtऔर अब आप परिवर्तनों की समीक्षा कर सकते हैं और जहां आवश्यक हो वहां कर सकते हैं
दिमित्री के

जवाबों:


173

मुझे लगता है stash -p है शायद आप चाहते हैं कि पसंद है, लेकिन अगर आप भविष्य में और भी मुश्किल चीजों में भाग लेते हैं, तो याद रखें:

Stashवास्तव में केवल थोड़ा और अधिक जटिल branchसेटों के लिए एक बहुत ही सरल विकल्प है । चीजों को जल्दी से इधर-उधर करने के लिए स्टैश बहुत उपयोगी है, लेकिन आप बिना ज्यादा सिरदर्द और काम किए शाखाओं से अधिक जटिल चीजों को पूरा कर सकते हैं।

# git checkout -b tmpbranch
# git add the_file
# git commit -m "stashing the_file"
# git checkout master

के बारे में जाओ और तुम क्या चाहते हो, और फिर बाद में बस rebaseऔर / या mergetmpbranch। यह वास्तव में बहुत ज्यादा अतिरिक्त काम नहीं है जब आपको स्टैश की तुलना में अधिक सावधानीपूर्वक ट्रैकिंग करने की आवश्यकता होगी।


2
उल्टा, आप एक विशाल दर्द के बिना वास्तविक शाखाओं में संघर्ष को बदल सकते हैं।
वेस हार्डेकर

88

यदि आप अपने स्टैक्ड परिवर्तनों के साथ कोई संदेश निर्दिष्ट नहीं करना चाहते हैं, तो डबल-डैश के बाद फ़ाइलनाम पास करें।

$ git stash -- filename.ext

यदि यह एक अनट्रैक / नई फ़ाइल है, तो आपको इसे पहले चरण में लाना होगा।

हालाँकि, यदि आप कोई संदेश निर्दिष्ट करना चाहते हैं, तो उपयोग करें push

git stash push -m "describe changes to filename.ext" filename.ext

दोनों तरीके git संस्करणों में काम करते हैं 2.13+


1
जब बनाने परिवर्तन में संशोधन इस उत्तर मेरे लिए सबसे सीधे आगे लगता है: git stash -- filename.ext, git commit --amend, git stash pop
ब्रैंडन डेवी

1
मुझे लगता है कि यह कुछ बहुत नई कार्यक्षमता पर निर्भर होना चाहिए। यह 2.1.4 git में काम नहीं करता है।
रिचर्ड स्मिथ

यह मेरे लिए कुछ अजीब व्यवहार में परिणाम है, गुप्त कोष के साथ सहेजा जा रहा है, लेकिन एक ही फाइल को एक ही समय (Git v2.20.1) पर मचान में जोड़ा जा रहा,
paradroid

58

आप अंतःक्रियात्मक रूप से एकल लाइनों को git stash -p(समान के साथ ) स्टैश कर सकते हैंgit add -p ) के ।

यह एक फ़ाइल नाम नहीं लेता है, लेकिन आप अन्य फ़ाइलों को dतब तक छोड़ सकते हैं जब तक आप उस फ़ाइल तक नहीं पहुंच जाते हैं जिसे आप स्टैक्ड करना चाहते हैं और वहाँ के साथ सभी परिवर्तनों को मिटा दें a


3
अगर आपको ढेर सारी फाइलें चाहिए तो आप बहुत समय ले सकते हैं।
जज

23
मुझे नहीं पता कि यह कब बदला गया लेकिन जैसा कि git 2.14.1आप फ़ाइल का नाम निर्दिष्ट कर सकते हैंgit stash -p <filename>
म्यूऑन

21

सबसे अच्छा विकल्प सब कुछ चरण है, लेकिन यह फ़ाइल है, और सूचकांक को रखने के लिए स्टैश को बताएं git stash save --keep-index, इस प्रकार आपकी अस्थिर फ़ाइल को स्टैशिंग करें:

$ git add .
$ git reset thefiletostash
$ git stash save --keep-index

जैसा कि डैन बताते हैं, thefiletostashकेवल एक ही स्टैश द्वारा रीसेट किया जाना है, लेकिन यह अन्य फ़ाइलों को भी चुरा लेता है, इसलिए यह बिल्कुल वैसा नहीं है जैसा हम चाहते हैं।


2
हालाँकि यह इंडेक्स को उसी स्थिति में रखता है, लेकिन क्या यह उन फ़ाइलों को भी स्टैश नहीं करता है जो इंडेक्स में हैं? दूसरे शब्दों में, यदि ऐसा करने के बाद आप करंट ब्रांच को इंडेक्स देते हैं, तो दूसरी ब्रांच पर जाएं और करें git stash pop, क्या यह सभी फाइलों को लागू करने वाला नहीं है, न कि केवल एक फाइल जिसे हम स्टैश करना चाहते हैं?
डैन मोल्डिंग

@DanMoulding: आप बिल्कुल सही कह रहे हैं, मैंने इस बारे में नहीं सोचा है।
चार्ल्स बीपी

16

जब आप 'गिट स्टैश' का उपयोग करते हैं, तो वास्तव में 'परिवर्तन को त्यागें' का मतलब है (और अस्थायी रूप से इसे छिपाने के लिए वास्तव में गिट का उपयोग न करें), उस स्थिति में आप उपयोग कर सकते हैं

git checkout -- <file>

ध्यान दें कि git stash ब्रांचिंग और स्टफिंग के लिए एक त्वरित और सरल विकल्प है।


मुझे लगता है कि यह सबसे अच्छा जवाब है यदि आप अपने सभी संशोधित परिवर्तनों को एक फ़ाइल में निकालना चाहते हैं।
मोहम्मद हसील

और मैं यह उस विशेष कार्य के लिए सबसे अच्छा जवाब होगा
जाकिर हुसैन 13

6
यह प्रश्न पर्याप्त रूप से स्पष्ट था और यह नहीं पूछा कि एक फाइल में परिवर्तन कैसे वापस किया जाए। Downvoted।
रिचर्ड स्मिथ

यह एक अच्छा जवाब है, स्पष्ट रूप से एक विकल्प के रूप में दिखा रहा है। लेकिन कुछ लोग अपमानजनक विशेषता के रूप में डाउनवोट का उपयोग करने के लिए पर्याप्त जिद्दी होंगे: +1
मुकुल जैन

@ मुकुलजैन मुझे वास्तव में बहुत अस्थायी रूप से स्टैश-पर-फाइल का उपयोग करने की आवश्यकता थी (मूल रूप से दो बदलावों में कुछ बदलावों को अलग करना, जो एक ही लाइन को प्रभावित करता था, एक फ़ाइल के लिए)। मैं वास्तव में नीचा नहीं दिखाऊंगा, बस यह कहूंगा कि यह मेरे लिए बेकार है।
पॉल स्टेलियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.