चूँकि git मूल रूप से सभी रिपॉजिटरी सामग्री और इंडेक्स (और एक या कई फाइलें नहीं) के प्रबंधन के बारे में है ,git stash
सौदों, आश्चर्यजनक रूप से , नहींसभी कार्यशील निर्देशिका के साथ।
दरअसल, Git 2.13 (Q2 2017) के बाद से, आप अलग-अलग फ़ाइलों को स्टैश कर सकते हैं git stash push
:
git stash push [--] [<pathspec>...]
जब pathspec
' git stash push
' को दिया जाता है , तो नया स्टैश केवल उन फ़ाइलों के लिए संशोधित स्टेट्स को रिकॉर्ड करता है जो कि pathspec से मेल खाती हैं "अधिक के लिए" विशिष्ट फ़ाइलों में परिवर्तन देखें " ।
सरलीकृत उदाहरण:
git stash push path/to/file
इस सुविधा का परीक्षण मामला कुछ और विकल्प दिखाता है:
test_expect_success 'stash with multiple pathspec arguments' '
>foo &&
>bar &&
>extra &&
git add foo bar extra &&
git stash push -- foo bar &&
test_path_is_missing bar &&
test_path_is_missing foo &&
test_path_is_file extra &&
git stash pop &&
test_path_is_file foo &&
test_path_is_file bar &&
test_path_is_file extra
मूल उत्तर (नीचे, जून 2010) मैन्युअल रूप से चुनने के बारे में था कि आप क्या करना चाहते हैं।
Casebash टिप्पणियाँ:
यह ( stash --patch
मूल समाधान) अच्छा है, लेकिन अक्सर मैंने बहुत सारी फ़ाइलों को संशोधित किया है ताकि पैच का उपयोग करना कष्टप्रद हो
bukzor का उत्तर ( उत्कीर्ण , नवंबर 2011)
git add
+ केgit stash --keep-index
आधार पर एक अधिक व्यावहारिक समाधान सुझाता है ।
देखते हैं और उसके उत्तर को बढ़ाते हैं, जो आधिकारिक होना चाहिए (मेरी बजाय)।
उस विकल्प के बारे में, chhh टिप्पणी में एक वैकल्पिक वर्कफ़्लो बताते हैं:
आपको git reset --soft
अपना स्पष्ट मंचन वापस पाने के लिए इस तरह के संघर्ष के बाद ": "
मूल स्थिति में आने के लिए - जो कि एक स्पष्ट मंचन क्षेत्र है और केवल कुछ चुनिंदा गैर-चरणबद्ध संशोधनों के साथ, कोई भी धीरे-धीरे अनुक्रमणिका को रीसेट कर सकता है (बिना इसके बिना) आप जैसा कुछ भी करना - bukzor - did)।
(मूल उत्तर जून 2010: मैनुअल स्टैश)
फिर भी, git stash save --patch
आप अपने द्वारा किए जा रहे आंशिक संघर्ष को प्राप्त करने की अनुमति दे सकते हैं:
इसके साथ --patch
, आप HEAD और वर्किंग ट्री के बीच के स्टेक में इंटरसेक्शुअल रूप से स्टॉक्स चुन सकते हैं।
स्टैश एंट्री का निर्माण इस तरह किया जाता है कि इसका इंडेक्स स्टेट आपके रिपॉजिटरी के इंडेक्स स्टेट की तरह ही होता है, और इसके वर्कट्री में केवल वही बदलाव होते हैं जो आपने इंटरेक्टिव रूप से चुने थे। चयनित बदलावों को फिर से आपके वर्कट्री से वापस रोल किया जाता है।
हालाँकि, यह पूर्ण अनुक्रमणिका को बचाएगा (जो कि आप जो चाहते हैं वह नहीं हो सकता है क्योंकि इसमें अन्य फ़ाइलें पहले से ही अनुक्रमणित हो सकती हैं), और एक आंशिक कार्यपत्रक (जो आप जिस तरह से स्लैश करना चाहते हैं उसे देख सकते हैं)।
git stash --patch --no-keep-index
एक बेहतर फिट हो सकता है।
यदि --patch
काम नहीं करता है, तो एक मैनुअल प्रक्रिया हो सकती है:
एक या कई फाइलों के लिए, एक मध्यवर्ती समाधान निम्नलिखित होगा:
- Git रेपो के बाहर उन्हें कॉपी करें
(वास्तव में, एटलोट्राम एक दिलचस्प विकल्प प्रस्तावित करता है )
git stash
- उन्हें वापस कॉपी करें
git stash
# इस समय, केवल वे फ़ाइलें जिन्हें आप चाहते हैं, वे स्टैक्ड हैं
git stash pop stash@{1}
# अपनी सभी फाइलों के संशोधनों को फिर से लागू करें
git checkout -- afile
# किसी भी स्थानीय संशोधनों से पहले फ़ाइल को HEAD सामग्री पर रीसेट करें
उस बल्कि बोझिल प्रक्रिया के अंत में, आपके पास केवल एक या कई फाइलें होंगी।
git stash --keep-index
सूचकांक रखता है, लेकिन यह सब कुछ चुराता है - सूचकांक और बाहर दोनों।