मैंने गिट के साथ एक फ़ाइल को हटा दिया है और फिर प्रतिबद्ध है, इसलिए फ़ाइल अब मेरे काम की प्रतिलिपि में नहीं है। मैं उस फ़ाइल की सामग्री को देखना चाहता हूं, लेकिन वास्तव में इसे पुनर्स्थापित नहीं करना चाहता। मैं यह कैसे कर सकता हूँ?
मैंने गिट के साथ एक फ़ाइल को हटा दिया है और फिर प्रतिबद्ध है, इसलिए फ़ाइल अब मेरे काम की प्रतिलिपि में नहीं है। मैं उस फ़ाइल की सामग्री को देखना चाहता हूं, लेकिन वास्तव में इसे पुनर्स्थापित नहीं करना चाहता। मैं यह कैसे कर सकता हूँ?
जवाबों:
git show HEAD^:path/to/file
आप एक स्पष्ट प्रतिबद्ध पहचानकर्ता का उपयोग कर सकते हैं या HEAD~nपुराने संस्करणों को देख सकते हैं या यदि आपने इसे हटा दिया है तो एक से अधिक प्रतिबद्ध हैं।
fatal: Invalid object name 'HEAD^'.(मुझे उल्लेख करना होगा, कि मेरे पास केवल "प्रारंभिक प्रतिबद्ध" है)
यदि यह एक ऐसी फ़ाइल है जिसे आपने कुछ समय पहले हटा दिया है और संशोधन के लिए शिकार नहीं करना चाहते हैं , तो आप उपयोग कर सकते हैं (फ़ाइल fooइस उदाहरण में है; आप एक पूर्ण पथ का उपयोग कर सकते हैं):
git show $(git rev-list --max-count=1 --all -- foo)^:foo
rev-listके सभी संशोधन के लिए मंगलाचरण दिखता है foo, लेकिन केवल सूचियों एक। चूँकि rev-listरिवर्स कालानुक्रमिक क्रम में सूचियाँ होती हैं, तो यह जो सूची है वह अंतिम संशोधन है जो परिवर्तित हो गई है foo, जो कि हटाए गए वचन होंगे foo। (यह धारणा है कि Git एक हटाई गई फ़ाइल को बदलने की और अभी तक अनुमति नहीं देता है पर आधारित है रहते हैं नष्ट कर दिया।) आप सिर्फ इतना है कि संशोधन उपयोग नहीं कर सकते rev-listरिटर्न के रूप में- क्योंकि fooअब कोई वहां मौजूद। आप जो फ़ाइल का अंतिम संशोधन, इसलिए होता है बस इसे पहले एक के लिए पूछने के लिए ^में git show।
**/fooयदि आप पथ नहीं जानते हैं, तो आप लिख सकते हैं (यह रिवाइस-लिस्ट कमांड के लिए काम करेगा, लेकिन शो कमांड नहीं। हालाँकि रि-लिस्ट कमांड से कमिटमेंट के बाद आप पा सकते हैं)।
चूँकि आप सटीक पथ को याद नहीं कर सकते हैं, आप इसके बजाय git लॉग से sha1 प्राप्त कर सकते हैं तो आप बस जारी कर सकते हैं
git cat-file -p <sha1>
git whatchanged --no-abbrevजो git (या svn) लॉग के समान आउटपुट देता है।
path/to/fileपरियोजना के शीर्ष (रिपॉजिटरी के शीर्ष डायर) से पूर्ण पथ है।