Git stash create के साथ बनाई गई stash को कैसे हटाएँ?


548

Git stash में मुझे जो चाहिए वह बहुत कुछ लगता है, सिवाय इसके कि यह स्क्रिप्ट के लिए थोड़ा कठिन है, जैसे कि अगर आपके पास कोई बदलाव नहीं है, तो git stash; git stash popआप अपनी रिपॉजिटरी में बदलाव करने की तुलना में कुछ अलग करेंगे।

ऐसा प्रतीत होता है कि git stash createउस समस्या का उत्तर है, और सब कुछ काम करता है, केवल एक चीज को छोड़कर ... मैं बनाई गई रोक से छुटकारा नहीं पा सकता। क्या कोई तरीका है, जिससे आप छुरा निकाल सकते हैं?

इसे 100% स्पष्ट करने के लिए कि मैं क्या कर रहा हूँ:

स्टैश बनाएं:

~/tmp/a(master) $ git stash create 
60629375d0eb12348f9d31933dd348ad0f038435
~/tmp/a(master) $ git st
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#
~/tmp/a(master) $ git reset --hard
HEAD is now at 555d572 log message

उपयोग करें:

~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435
fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory
~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#

इस स्‍टैश को हटाएं: (सिवाय इसके कि यह अंतिम बिट काम नहीं करता है)

~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference

समय की दूरी के बावजूद, मैं साथी यात्रियों के लिए इंगित करना चाहता हूं कि git applyइस लेखन के समय दूसरे कोड बॉक्स में रन पैच लागू नहीं हुआ था - आउटपुट में त्रुटि संदेश ने आपको यह बताया था। तो वास्तव में, आपने एक स्लैश बनाने की कोशिश की (जो काम नहीं आया, नीचे टिप्पणी देखें) एक स्लैश लागू करें जो कि बनाया नहीं गया, फिर एक स्लैश छोड़ें जो कि बनाया नहीं गया। यही कारण है कि आपने कुछ भी काम नहीं किया।
प्रोफेसर टॉम

1
@ProfistrTom स्टैश बनाया गया था, यही कारण है कि यह एक हैश कोड लौटा दिया, और क्यों git stash applyकाम किया। git applyस्थानीय पैच फ़ाइल पढ़ने का प्रयास, जो मौजूद नहीं है। ईमानदार होने के लिए, यह शायद वहां नहीं होना चाहिए, और यह कभी भी काम नहीं कर सकता है। मैं अस्पष्ट रूप से इसे प्रश्न से हटाने के लिए लुभा रहा हूं, लेकिन यह देखते हुए कि इसने अपने वर्तमान स्वरूप में इतनी मदद की है, मैं इसे वैसे ही छोड़ दूंगा।
पॉल वैगलैंड

जवाबों:


367

के साथ बनाई गई एक सामान्य स्थिति को हटाने के लिए git stash, आप चाहते हैं git stash dropया git stash drop stash@{n}। अधिक जानकारी के लिए नीचे देखें।


आप के साथ बनाई गई एक कड़ी को हटाने की जरूरत नहीं है git stash create। डॉक्स से:

एक स्टैश एंट्री (जो एक नियमित रूप से प्रतिबद्ध वस्तु है) बनाएं और इसका ऑब्जेक्ट नाम वापस करें, बिना इसे रेफ नेमस्पेस में कहीं भी संग्रहीत किए बिना। यह स्क्रिप्ट के लिए उपयोगी होने का इरादा है। यह संभवतः वह कमांड नहीं है जिसका आप उपयोग करना चाहते हैं; ऊपर "सहेजें" देखें।

चूँकि कुछ भी स्टैश कमिटमेंट का संदर्भ नहीं देता है, इसलिए इसे अंततः एकत्र किया गया कचरा मिलेगा।


के साथ बनाई गई एक स्लैश git stashया के git stash saveलिए सहेजा जाता है refs/stash, और के साथ हटाया जा सकता है git stash drop। सभी Git ऑब्जेक्ट्स की तरह, वास्तविक स्टैश सामग्री आपके कंप्यूटर से तब तक नहीं हटाई जाती जब तक कि gcउन ऑब्जेक्ट्स को समाप्त होने के बाद prunes (डिफ़ॉल्ट 2 सप्ताह बाद)।

पुराने stashes में सहेजे जाते हैं refs/stash reflog (कोशिश cat .git/logs/refs/stash), और साथ हटाया जा सकता है git stash drop stash@{n}जहां, nसंख्या से दिखाया गया है git stash list


20
यह टाइटेनियम प्रश्न का उत्तर नहीं देता है। परिणामस्वरूप, मेरे जैसे लोग, जो Google के माध्यम से इस सवाल पर पहुंचते हैं कि वे टिट्युलर प्रश्न का उत्तर खोज रहे हैं और विशेष रूप से वास्तविक विवरणों की परवाह नहीं करते हैं, उस व्यक्ति को वोट देते हैं जिसने वास्तव में इसका उत्तर दिया है। कुछ लोग भी सहजता से स्वीकार किए गए जवाब को वोट देते हैं क्योंकि यह उनकी मदद नहीं करता है। मैंने व्यक्तिगत रूप से सिर्फ उस उत्तर को उकेरा जिससे मुझे मदद मिली।
आर्टऑफवर्फ

15
तो: 1) Google "git delete stash" 2) प्रश्न शीर्षक 3 की पहली छमाही के आधार पर SO लिंक पर क्लिक करें) सही उत्तर शीर्षक के दूसरे भाग के लिए विशिष्ट उत्तर दें। वह नया है।
dahlbyk

10
@ArtOfWarfare तब पढ़ने की समझ की कमी होगी, क्योंकि यह बहुत ही स्पष्ट रूप से "टाइटुलर प्रश्न" की प्रतिक्रिया है।
क्रिस हेस

1
काफी उचित। मैं बस का उपयोग करके अपनी लड़खड़ाहट पैदा करता हूं git stash- मुझे नहीं पता कि वास्तव में नक्शे git stash createया कुछ और। Git निश्चित रूप से कुछ है जो मैं अभी भी सीख रहा हूं (यदि यह नहीं था, तो मैं SO Q और इस तरह से नहीं
पढ़ूंगा

1
@ AdrianPronk यह वास्तव में उस चीज की तरह है जिसकी मैं वास्तव में उपयोग करने की सलाह दूंगा git stash create। एक टाइमस्टैम्प्ड पैच फ़ाइल में सहेजने के बजाय, आप बस कस्टम रेफरी (उदा refs/backup) में आपके लिए इसे बचाने के लिए गिट रिफ्लक्स को दे सकते हैं । मैं 1) git stash create, 2) की तरह कुछ कोशिश करूँगा कि refs/backup^{tree}अगर पेड़ अलग है, तो 3) के साथ नए डंठल के पेड़ की तुलना करें git update-ref --create-reflog refs/backup <stash-sha>। आखिरकार पुराने बैकअप स्‍टैच अपने आप छंट जाएंगे।
डेहल्बिक

838

git stash dropजो शीर्ष गुप्त कोष में चला जाता है - - कोई पैरामीटर लेता है या एक गुप्त कोष संदर्भ जो दिखता है जैसे: stash@{n}जो nनामांकित करता है जो छोड़ने के लिए भी छिपा सकते। आप एक id आईडी पास नहीं कर सकते git stash drop

git stash drop            # drop top hash, stash@{0}
git stash drop stash@{n}  # drop specific stash - see git stash list

स्टाॅप को गिरा देने से स्टैक के नीचे सभी स्टैच के पदनाम बदल जाएंगे stash@{n}

मुझे यकीन नहीं है कि आपको ऐसा लगता है कि आपको एक स्लैश छोड़ने की आवश्यकता है क्योंकि यदि आप stash createएक स्टैश प्रविष्टि का उपयोग कर रहे हैं तो आपके "स्टैश" के लिए नहीं बनाया गया है इसलिए ड्रॉप करने के लिए कुछ भी नहीं है।


खैर, प्रविष्टि "स्टैश" का उपयोग करके बनाई गई है ... कोई तार्किक रूप से सोचता है कि इसे "स्टैश" का उपयोग करके हटा दिया जाएगा।
पॉल वैगलैंड

2
Git stash के लिए मैन पेज देखें। stash create एक एंट्री नहीं बनाता है, केवल stash के लिए कमिट ऑब्जेक्ट है ताकि हटाने के लिए stash लॉग में कोई एंट्री न हो।
सीबी बेली

3
आदमी से : बनाने के एक गुप्त कोष (जो एक नियमित रूप से वस्तु के लिए प्रतिबद्ध) और उसके ऑब्जेक्ट नाम वापसी, रेफरी नाम स्थान में कहीं भी भंडारण के बिना बनाएँ।
रफिन

40
सावधानी : आपको संभवतः 1, 2, 3 जैसे कई ड्रॉप नहीं करने चाहिए, क्योंकि आप वास्तव में ड्रॉपिंग समाप्त कर देंगे, जो मूल रूप से नंबर 1, 3 और 5 है। 1, 2, और 3 को छोड़ने का सही तरीका है, उन्हें क्रम 3, 2, 1, या 1, 1, 1 में करें। इसके अलावा, यह 0 अनुक्रमित है, 0 स्टैक के शीर्ष पर है।
आर्टऑफवर्फ सेप

2
"एक्सटेंशन चेंज" बटन दबाए जाने पर Git एक्सटेंशन एक अज्ञात कमांड जारी करता है, और जो कुछ भी करता है वह एप्लिकेशन से बाहर निकलने और फिर से शुरू करने पर बना रहता है। GUI का उपयोग करके स्टैश से छुटकारा पाने का कोई स्पष्ट तरीका नहीं है, लेकिन कमांड लाइन "git stash list" से WIP स्टैश दिखाई देता है, और "git stash clear" से छुटकारा मिलता है।
डेव

215

यदि आप 100% सुनिश्चित हैं कि आपके पास बस एक ही स्टेश है या आप सभी स्टैट्स को हटाना चाहते हैं ( git stash list107% सुनिश्चित करें), तो आप कर सकते हैं:

git stash clear

..और उनके बारे में भूल जाओ (यह सभी बाधाओं को हटाता है)।

नोट: यह जवाब उन लोगों के लिए जोड़ा गया है, जो उन सभी (जैसे मेरे) को खाली करने का रास्ता ढूंढ रहे हैं।


26
यदि आपके पास केवल एक ही डंठल है, तो मैं अभी भी उपयोग करने की सलाह दूंगा, git stash dropक्योंकि केवल एक ही डंठल गिरता है, और आपको उम्मीद से अधिक खोने की चिंता करने की आवश्यकता नहीं है।
पॉल वैगलैंड

अपवित्र के रूप में यह वास्तव में इस सवाल का जवाब देता है कि क्या ऐसा करने के लिए सबसे अच्छा अभ्यास है या नहीं। मुझे वास्तव में इसकी आवश्यकता है, क्योंकि आज मैंने जो भी निर्माण किया है, उसे दूर करने की आवश्यकता है।
एलेक्स मैककेबे

2
मैं लंबे समय से स्टैश का इस्तेमाल कर रहा हूं। हालांकि इस बार मैं git stash dropहमेशा की तरह उपयोग करके अपने द्वारा किए गए आखिरी संघर्ष से छुटकारा नहीं पा सका । मुझे यकीन नहीं है कि मैंने अलग तरीके से क्या किया। वैसे भी, git stash clearमेरे लिए काम किया। पता नहीं यह अस्तित्व में था। +1
कोन्स्टेंटिनोस गैतानिस

3
+1 क्योंकि गिट स्लैश को छोड़ने से इनकार कर रहा था, क्योंकि स्टैश द्वारा बनाई गई फ़ाइलों में से एक पहले से ही अब मौजूद है ..
थियागो बारकला

12
विशेष रूप से, 107% निश्चित है।
लेविनिन्जा

84

Git doc से: http://git-scm.com/docs/git-stash

ड्रॉप [-q | --क्विक] []

स्‍टैश सूची से एकल चरणबद्ध स्थिति निकालें। जब नहीं दिया जाता है, तो यह नवीनतम को हटा देता है। यानी stash@{0}, अन्यथा फॉर्म स्‍टैश @ {} का वैध स्‍टैश लॉग संदर्भ होना चाहिए।

उदाहरण:

git stash drop stash@{5}

यह स्लैश प्रविष्टि को हटा देगा। सभी स्टैम्स की सूची देखने के लिए:

git stash list

4
सिवाय इसके कि मैं स्पष्ट रूप से सवाल के नीचे कहता हूं कि git stash ड्रॉप वह नहीं करता है जो मैं चाहता हूं।
पॉल वैगलैंड

1
मैं अनुशंसा करता हूं कि उपयोग git stash show stash@{REPLACE_IT_WITH_STASH_INDEX}करने से पहले एक स्टैश की सामग्री की जाँच करें git stash drop। मेरा विश्वास करो, यह बहुत परेशानी को बचाएगा :)
realPK

71

आपको उपयोग करना चाहिए

git stash save

और नहीं

git stash create

क्योंकि यह एक स्टैश बनाता है (जो एक नियमित रूप से प्रतिबद्ध वस्तु है) और इसका ऑब्जेक्ट नाम वापस करें, इसे रेफ नेमस्पेस में कहीं भी संग्रहीत न करें । इसलिए स्टैश अप्लाई के साथ सुलभ नहीं होगा।

उपयोग git stash save "some comment"तब किया जाता है जब आपके पास अस्थिर परिवर्तन होते हैं जो आप किसी अन्य शाखा पर दोहराने / स्थानांतरित करना चाहते हैं

git stash apply stash@{0}जब आप अपने सहेजे गए (धराशायी) परिवर्तन को अपनी वर्तमान शाखा पर प्रतिबिंबित करना चाहते हैं, तो अपने सहेजे गए स्टैश इंडेक्स का उपयोग करें (0 मानकर)

आप हमेशा git stash listसभी इंडेक्स को जांचने के लिए उपयोग कर सकते हैं

और उपयोग git stash drop stash@{0}(अपने सहेजे गए स्टैश इंडेक्स को मानकर 0 है और आप इसे हटाना चाहते हैं) एक विशेष स्टैश को हटाने के लिए।


3
बस जानकारी के लिए - बस कमांड git stashडिफॉल्ट टाइप करनाgit stash save
RBT

1
git stash createस्क्रिप्ट द्वारा उपयोग किए जाने का इरादा है। यह ओपी का उपयोग मामला है। तो, अनुशंसा git stash save"सामान्य" उपयोगों के लिए उपयोगी हो सकती है, लेकिन ओपी के उपयोग के मामले के लिए नहीं। ओपी डॉक्स पर एक नज़र रखना चाह सकते हैं : स्क्रिप्टिंग से संबंधित अधिक कमांड हैं, उदाहरण के लिएgit stash store
एड्रियन डब्ल्यू

1
git stash save "message"आजकल पढ़ना चाहिए git stash push -m "message"। तुलना करेंgit commit -m "message"
Tino

2

यह भी काम करता है

git stash drop <index>

पसंद

git stash drop 5

1

दस्तावेज़ यहाँ है (चीनी में) कृपया क्लिक करें।

आप उपयोग कर सकते हैं

गिट स्टैश सूची

git स्टैश ड्रॉप स्टैश @ {0}

यहाँ छवि विवरण दर्ज करें


git stash createके लिए अलग है git stash save, विशेष रूप से, बनाने के फार्म सूची में दिखाई नहीं देता है, और गिराया नहीं जा सकता है, इसलिए प्रश्न।
पॉल वैगलैंड

@PaWWagland अपना उत्तर दें और उत्तर की आपूर्ति करें। ईमानदारी से ash मुझे आधिकारिक दस्तावेज़ में "गिट स्टैश क्रिएट" नहीं मिला। लेकिन इसके बारे में, यह मेरी दिलचस्पी है। यदि आप "गिट स्टैश लिस्ट" में "गिट स्टैश क्रिएट" ढूंढना चाहते हैं। आप यह ऊपर कर सकते हैं।
लोंगेली

0
git stash           // create stash,
git stash push -m "message" // create stash with msg,
git stash apply         // to apply stash,
git stash apply indexno // to apply  specific stash, 
git stash list          //list stash,
git stash drop indexno      //to delete stash,
git stash pop indexno,
stash pop = stash drop + stash apply
git stash clear         //clear all your local stashed code
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.