कैसे एक पैच बनाने के द्वारा एक विशेष प्रतिबद्ध करने के लिए एक फ़ोल्डर वापस करने के लिए


97

यहाँ फ़ोल्डर 'somefolder' के लिए मेरा इतिहास है

$ git log somefolder

commit 89cd
More changes to somefolder

commit ef47a
Updating somefolder and other stuff

commit e095
Bugs fixed in somefolder

मैं कुछ फ़ोल्डर वापस करने के लिए 'कुछ फ़ोल्डर में तय कीड़े' वापस करना चाहते हैं।

चूंकि कुछ फ़ोल्डर के बाहर दूसरा कमिटेड बदलाव होता है, इसलिए मैं इस कमिट को वापस नहीं करना चाहता।

मुझे लगता है कि सबसे सुरक्षित तरीका कमिट e095 और 89cd के बीच एक अंतर / पैच बनाना होगा जो केवल कुछ फ़ोल्डर पर लागू होता है, और फिर उस पैच को लागू करें। मैं उसे कैसे कर सकता हूँ?

जवाबों:


156

आप किसी विशेष राज्य में अपनी रिपॉजिटरी को अपडेट करने के लिए git चेकआउट का उपयोग कर सकते हैं ।

git checkout e095 -- somefolder

अंतर पैदा करने के बारे में आपके प्रश्न के लिए, यह भी काम करेगा। बस अपनी वर्तमान स्थिति से वापस जाने के लिए अंतर उत्पन्न करें e095:

git diff 89cd..e095 -- somefolder

30
यह उन फ़ाइलों को नहीं हटाता है जो उस प्रतिबद्ध में जोड़ी गई थीं, git reset e095 -- some/folderइसके बजाय का उपयोग करें
शिम

3
Git 2.22 से आप उपयोग कर सकते हैं --no-overlayके लिए git checkoutइतना है कि में प्रतिबद्ध नहीं कर रहे हैं आप से निकाल दिया जाएगा बाहर की जाँच कर रहे हैं कि पता लगाया फ़ाइलें।
मैरीस पावेल्स्की

54

आप git resetअनुक्रमणिका को रीसेट करने के लिए उपयोग कर सकते हैं जिसमें ऐसी फ़ाइलों को निकालना भी शामिल होगा जिन्हें हाल ही में किए गए कमिट में जोड़ा गया था ( git checkoutयह स्वयं ऐसा नहीं करता है):

git reset e095 -- somefolder

हालाँकि git resetकार्यशील प्रति अद्यतन नहीं करता है और --hardविकल्प फ़ोल्डर्स के साथ काम नहीं करता है। तो फिर git checkoutकाम की प्रतिलिपि को सूचकांक के समान बनाने के लिए उपयोग करें:

git checkout -- somefolder

और फिर यदि आप किसी भी फाइल को हटाना चाहते हैं, तो आपको भी टूडू की जरूरत है:

git clean -fd somefolder

यह उत्तर मेरे लिए काम करता है जब निर्देशिका में नई फाइलें शामिल होती हैं।
यहोहो

2
यह जवाब बहुत बेहतर है यदि आप वास्तव में उस समय भंडार का एक साफ स्नैपशॉट चाहते हैं।
डेटा राजकुमारी

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