मैं एक विशिष्ट फ़ाइल कैसे कर सकता हूँ?


1653

मैं किसी विशिष्ट फ़ाइल को कैसे छोड सकता हूँ, जिसे वर्तमान में बचाए गए अन्य स्टैस से बचा सकता है?

उदाहरण के लिए, अगर git स्टेटस मुझे यह देता है:

younker % gst      
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   app/controllers/cart_controller.php
#   modified:   app/views/cart/welcome.thtml
#
no changes added to commit (use "git add" and/or "git commit -a")

और मैं केवल ऐप / विचार / कार्ट / स्वागत.श्टल को स्टेश करना चाहता हूं, मैं यह कैसे करूंगा? कुछ इस तरह (लेकिन निश्चित रूप से यह काम नहीं करता है):

git stash save welcome_cart app/views/cart/welcome.thtml

57
"संभव डुप्लिकेट" प्रश्न वर्तमान में एक गलत उत्तर है जिसे स्वीकार किया गया है।
पेंग्विन ब्रायन

6
आप इसका उपयोग कर सकते हैं git checkout -- filenameऔर इसे मूल स्थिति में वापस ला सकते हैं ।
9

7
@visualex यह वास्तव में इसे वापस लाएगा, लेकिन इसे स्टैश नहीं करेगा
जेसपर

2
री पेंग्विन ब्रायन की टिप्पणी: हाँ, इस सवाल के "संभव डुप्लिकेट" प्रश्न का हाल ही में स्वीकार किए गए उत्तर इस सवाल के हालिया संस्करणों के लिए लिंक है।
मंगल

1
$ git की
कड़ी

जवाबों:


2509

संपादित करें: 2.13 git के बाद से, स्टैश के लिए एक विशिष्ट पथ को बचाने के लिए एक कमांड है git stash push <path>:। उदाहरण के लिए:

git stash push -m welcome_cart app/views/cart/welcome.thtml

पुराने उत्तर:

आप ऐसा कर सकते हैं git stash --patch(या git stash -p) - आप इंटरेक्टिव मोड में प्रवेश करेंगे जहां आपको प्रत्येक हंक के साथ प्रस्तुत किया जाएगा जिसे बदल दिया गया था। nउन फ़ाइलों को छोड़ने के लिए उपयोग करें , जिन्हें आप स्टैश नहीं करना चाहते हैं, yजब आप एक को मुठभेड़ करते हैं जिसे आप स्टैश करना चाहते हैं, और qशेष हिस्सों को बिना थके हुए छोड़ने और छोड़ने के लिए। aदिखाए गए हंक और बाकी हिस्सों को उस फाइल में दबाएंगे।

सबसे उपयोगकर्ता के अनुकूल दृष्टिकोण नहीं है, लेकिन यदि आपको वास्तव में इसकी आवश्यकता है तो यह काम पूरा कर लेता है।


32
बोझिल, लेकिन काम करता है। काश, केवल मंचन किए गए परिवर्तनों को छिपाने का एक त्वरित तरीका था, और जब यह पॉपअप हो जाता है, तो यह परिवर्तन अस्थिर काम करने वाले पेड़ में चले जाते हैं।
जेम्स जॉनसन

56
@JamesJohnston git stash --keep-indexआपको सभी अस्थिर परिवर्तनों (आप जो खोज रहे हैं, उसके विपरीत) को छिपाने की अनुमति देगा। stackoverflow.com/a/8333163/378253
nimser

123
यदि आप aइसके बजाय कहते हैं yकि हंक + फ़ाइल के शेष भाग को रोक देगा, जो बहुत तेज है।
I_am_jorf

53
@ जैफामफोन शानदार! यह भी dविपरीत होगा, यानी वर्तमान फ़ाइल में किसी भी आगे की छड़ें नहीं। और वास्तव में ?सभी संभावित विकल्प दिखाएंगे।
omnikron

9
@Vencovsky यह "संदेश" के लिए खड़ा है और इसका उपयोग स्टैश के वैकल्पिक विवरण को निर्दिष्ट करने के लिए किया जाता है। यदि आपको इसकी आवश्यकता नहीं है, तो आप -m welcome_cartभाग को छोड़ सकते हैं।
svick

336

मैं आमतौर पर अनुक्रमणिका परिवर्तनों में जोड़ता हूं मैं स्टैश नहीं करना चाहता हूं और फिर --keep-indexविकल्प के साथ स्टैश ।

git add app/controllers/cart_controller.php
git stash --keep-index
git reset

अंतिम चरण वैकल्पिक है, लेकिन आमतौर पर आप इसे चाहते हैं। यह इंडेक्स से बदलाव को हटाता है।


चेतावनी जैसा कि टिप्पणी में कहा गया है, यह सब कुछ मंच पर और मंचित दोनों में डाल देता है। --keep-indexसिर्फ अकेले के बाद गुप्त कोष से किया जाता है सूचकांक छोड़ देता है। जब आप बाद में स्टैश पॉप कर सकते हैं तो इससे मर्ज टकराव हो सकता है।


5
यदि आप बहुत से बदलाव चाहते हैं, तो यह स्वीकार किए गए उत्तर की तुलना में बेहतर है - आप --patch विकल्प के माध्यम से उतारा नहीं करना चाहते हैं।
quux00

181
नहीं, यह सब कुछ मंच पर रखता है, दोनों मंचन और अस्थिर। --keep-indexसिर्फ अकेले के बाद गुप्त कोष से किया जाता है सूचकांक छोड़ देता है। तो यह सवाल का एक वैध जवाब नहीं है, AFAICT।
रमन

2
इस का उलटा काम करने के लिए @ राहेल के सवाल पर मेरा जवाब देखें (मंचन किए गए बदलावों को, बिना बदले हुए बदलावों को तोड़ते हुए) - stackoverflow.com/questions/3040833/…
JesusFreke

3
इसके बाद, यदि आप अपने द्वारा जोड़े गए फ़ाइलों को कम किए बिना आपके द्वारा वापस ली गई फ़ाइलों को प्राप्त करना चाहते हैं, तो आप चला सकते हैं git stash; git stash pop stash@{1}
21

8
चेतावनी: @ रमन की बात पर ध्यान दें। यह वह नहीं करता है जो उसे करना चाहिए। यह उन परिवर्तनों को स्टैश में डाल देगा और उन्हें काम करने वाले पेड़ में छोड़ देगा। जब आप बाद में स्टैश को पॉप करने की कोशिश करते हैं, तो आपको मर्ज टकराव होने की संभावना होती है, और वे वास्तव में अक्सर भ्रमित होते हैं और ठीक करने में मुश्किल होते हैं।
rjmunro

28

Svick के उत्तर में जोड़ने के लिए, -mविकल्प केवल आपके संदेश को एक संदेश जोड़ता है, और पूरी तरह से वैकल्पिक है। इस प्रकार, आज्ञा

git stash push [paths you wish to stash]

पूरी तरह से वैध है। उदाहरण के लिए, यदि मैं src/निर्देशिका में केवल परिवर्तन करना चाहता हूं, तो मैं बस चला सकता हूं

git stash push src/
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.