2010-11-22 19 views
26

मैं सोच रहा हूं कि प्रतिबद्धता के विशिष्ट हंक को तुरंत उलटने का कोई तरीका है या नहीं।मैं गिट में किसी प्रतिबद्धता के विशिष्ट हंक को कैसे उलटा सकता हूं?

मैं अंतर देखने के लिए दो कमिट्स या HEAD के बीच diff उत्पन्न कर सकता हूं।

मैं उन शिकारीयों में से केवल एक को कैसे उलट सकता हूं (या बेहतर अभी तक, विशिष्ट शिकारी का एक सेट)?

उत्तर

34
git checkout -p $REF -- path/to/file 

कहाँ $REF एक रेफरी नाम है या आईडी निर्दिष्ट करता है कि प्रतिबद्ध से फ़ाइल राज्य ले जाना चाहते प्रतिबद्ध। उदाहरण के लिए, अंतिम प्रतिबद्धता में किए गए परिवर्तनों को चुनिंदा रूप से वापस करने के लिए, HEAD^ का उपयोग करें।

+3

अधिक सटीक, यह आपको पिछले प्रतिबद्धता से सामग्री के संस्करणों को चुनिंदा रूप से जांचने देगा; आपके वर्तमान प्रतिबद्धता और कार्य पेड़ के बीच परिवर्तन भी त्याग दिया जाएगा। – Cascabel

+0

हां मैंने पहले ऐसा किया है। लेकिन यह सभी बदलावों को वापस कर देता है? मैं केवल कुछ बदलावों को वापस लौटाना चाहता हूं। – dkinzer

+1

@ डीकिंजर: नहीं, '-पी' विकल्प आपको अपने काम करने वाले पेड़ पर लागू होने के लिए हंसी का चयन करने देगा। – cdhowie

1

प्रतिबद्ध मैं इस सवाल का जवाब यहां इस्तेमाल पिछले एक हटा लिए गए फ़ाइल को ठीक करने के लिए:

Find and restore a deleted file in a Git repository

git checkout <deleting_commit>^ -- <file_path> 
2
git difftool $REF -- /path/to/file 

जहां $REF एक रेफरी का नाम या आईडी निर्दिष्ट प्रतिबद्ध है प्रतिबद्ध आप करना चाहते हैं से फ़ाइल स्थिति ले लो। उदाहरण के लिए, अंतिम प्रतिबद्धता में किए गए परिवर्तनों को चुनिंदा रूप से वापस करने के लिए, HEAD^का उपयोग करें।

इस प्रश्न का पहले से ही @cdhowie द्वारा उत्तर दिया गया था, लेकिन मुझे meld जैसे इंटरैक्टिव difftool का उपयोग करने के लिए कुछ हद तक अच्छा लगता है ताकि पुराने शिकारी/कोड की लाइनों को चुनिंदा रूप से पुनर्स्थापित किया जा सके, खासकर अगर कोई नव-परिचय, हार्ड-टू-फाइंड कोड में बग।

संबंधित मुद्दे

 संबंधित मुद्दे