अतिरिक्त फ़ाइलों को अधिलेखित करने के लिए फोर्स गिट स्टैश


223

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

फिर जब मैं रिपॉजिटरी में स्टेश लगाता हूं, तो पहले से ही फाइल में जुड़ने के कारण मुझे उलझनें होती हैं।

मैं स्टेश कैसे लागू कर सकता हूं, और रिपॉजिटरी में मूल की वरीयता के लिए उपयोग किए जाने वाले स्टैश में संस्करणों को मजबूर कर सकता हूं?

धन्यवाद


7
बदसूरत समाधान जब तक कोई एक बेहतर एक के साथ आता है: करने git rmसे पहले उपयोग करके नई फ़ाइलों को हटा दें git stash apply
टॉम

क्या वह इतिहास नहीं खोएगा? अनमॉडिफाइड संस्करणों को जोड़ने का कारण इतिहास को बनाए रखना था।
स्टीफन

1
नहीं, यह इतिहास नहीं खोएगा। यदि आप कोई फ़ाइल निकालते हैं, तो इसे एक छोटे संशोधन के साथ वापस जोड़ें, और फिर प्रतिबद्ध करें, gitइसे केवल एक छोटे संशोधन के रूप में मानेंगे।
टॉम

जवाबों:


364

git checkoutइसके बजाय का उपयोग करें git stash apply:

$ git checkout stash -- .
$ git commit

यह वर्तमान निर्देशिका की सभी फ़ाइलों को उनके स्टैक्ड संस्करण में पुनर्स्थापित करेगा।


यदि कार्यशील निर्देशिका में अन्य फ़ाइलों में परिवर्तन होते हैं, जिन्हें रखा जाना चाहिए, तो यह कम भारी-भरकम विकल्प है:

$ git merge --squash --strategy-option=theirs stash

यदि अनुक्रमणिका में परिवर्तन होते हैं, या मर्ज स्थानीय परिवर्तनों के साथ फ़ाइलों को स्पर्श करेगा, तो गिट विलय के लिए मना कर देगा। अलग-अलग फ़ाइलों का उपयोग करके स्टैश से जाँच की जा सकती है

$ git checkout stash -- <paths...>

या अंतःक्रियात्मक रूप से

$ git checkout -p stash

इनमें से किसी ने भी मेरे उपयोग के मामले में काम नहीं किया। निष्कर्ष और मेरा समाधान यहां हैं stackoverflow.com/a/26685296/496046 - इससे आपकी स्थिति भी हल हो जानी चाहिए, @AlexanderBird
1:14

2
git checkout stash -- .जब मैंने इसे चलाया तो इस कमांड ने वास्तव में कुछ नहीं किया।
रटाइज़र एमएचओ

3
@RotsiserMho Git पुष्टि संदेश प्रदान करने के बारे में बहुत अच्छा नहीं है। क्या आपको यकीन है कि इसने कुछ नहीं किया? मेरे लिए ठीक काम किया।
सिंजई

5
मुझे git checkout stash -- .उच्चतम पैरेंट फ़ोल्डर में चलना पड़ा जिसमें मेरे परिवर्तन थे, अन्यथा यह केवल उस फ़ोल्डर में परिवर्तन लागू करता था जहाँ से मैंने कमांड चलाया था।
सिंह

1
@Leo: यह सही है, यह इसलिए है क्योंकि .वर्तमान निर्देशिका निर्दिष्ट करता है (आप इसे निर्देशिका बदलने के बजाय किसी भिन्न पथ से बदल सकते हैं)। मैंने अपना उत्तर अपडेट करके स्पष्ट कर दिया है।
टॉम

13

git stash show -p | git apply

और फिर git stash dropयदि आप स्टैक्ड आइटम को छोड़ना चाहते हैं।


2
नोट: आपको सही ढंग से काम करने के लिए रिपॉजिटरी की जड़ में होना चाहिए, अन्यथा आपको यह मिल जाएगा ।
रुस्लान

@PengheGeng जैसा कि आप देख सकते हैं कि मैंने नेटइम्यूएल से पहले एक साल के बारे में जवाब दिया
हसन टीबीटी

@Ruslan मैं अपने रेपो की जड़ में in हो रहा हूं
लियो

6

git stash popइस कमांड को चलाने के लिए

git stash show -p | git apply && git stash drop

1

टी एल; डॉ:

git checkout HEAD path/to/file
git stash apply

दीर्घ संस्करण:

आपको यह त्रुटि इसलिए मिलती है क्योंकि जो परिवर्तन आप अधिलेखित करना चाहते हैं। इन परिवर्तनों को पूर्ववत करें git checkout HEAD। आप किसी विशिष्ट फ़ाइल में परिवर्तनों को पूर्ववत कर सकते हैं git checkout HEAD path/to/file। संघर्ष के कारण को हटाने के बाद, आप हमेशा की तरह आवेदन कर सकते हैं।

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