2009-05-20 2 views
188

मेरे पास फ़ाइल में "main.cpp" फ़ाइल है।गिट-चेकआउट एक नए नाम के तहत फ़ाइल का पुराना संशोधन

मैं संपादक में भी "main.cpp" के पिछले संशोधन को देखना चाहता हूं।

जिस तरह से मैं इसे करता हूं वह इस तरह है।

close "main.cpp" in the editor 

prompt> mv main.cpp tmp 
prompt> git checkout HEAD^ main.cpp 
prompt> mv main.cpp old_main.cpp 
prompt> mv tmp main.cpp 
prompt> 

open "main.cpp" and "old_main.cpp" in the editor 

क्या इसे सरल बनाया जा सकता है, इसलिए मुझे संपादक में "main.cpp" बंद करने की आवश्यकता नहीं है?

जो मैं उम्मीद कर रहा हूं वह git-checkout का एक संस्करण है जो यह कर सकता है।


अद्यतन: मैक OSX 10.5.7

prompt> git --version 
git version 1.6.0.4 
prompt> 

पर Git का उपयोग कर im UPDATE2: जेकब Narębski जवाब है:

prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp 
prompt> 

Update3: कर्मी का जवाब, एक विशिष्ट संशोधन के लिए:

prompt> git show 4c274dd91dc:higgs/Higgs.xcodeproj/project.pbxproj > old_project.pbxproj 
prompt> 
+0

आप किस संपादक का उपयोग करते हैं? शायद यह गिट के लिए समर्थन जोड़ने प्लगइन/एडन/मॉड्यूल है? –

+0

मैं टेक्स्टमैट का उपयोग करता हूं। इसमें कुछ गिट समर्थन है, मैंने यह जांच नहीं की है कि यह कर सकता है या नहीं। – neoneye

+0

टेक्स्टमेट में गिट बंडल है: http://github.com/timcharper/git-tmbundle (आपको गिट विकी पर InterfacesFrontendsAndTools पृष्ठ की जांच करनी चाहिए: http://git.or.cz/gitwiki/) –

उत्तर

211

आपको लगता है कि के लिए "Git शो" का उपयोग कर सकते हैं:

prompt> git show HEAD^:main.cpp > old_main.cpp 

(नोट पेट ':' HEAD^ और main.cpp` के बीच चरित्र नहीं है।) "< संशोधन >: < पथ > निर्दिष्ट संशोधन "खंड" वाक्य रचना में git rev-parse मैनपेज में वर्णन किया गया है, अगले पिछले बात करने के लिए ":

  • < राजस्व >: < पथ >, उदा HEAD: README,: README, गुरु: ./ README

    प्रत्यय : एक पथ नाम ब्लॉब या पेट के पहले भाग द्वारा नामित पेड़-ish वस्तु में दिए गए पथ पर पेड़ के द्वारा पीछा किया। :path (कोलन से पहले एक खाली भाग के साथ) अगले वर्णित वाक्यविन्यास का एक विशेष मामला है: दिए गए पथ पर इंडेक्स में दर्ज सामग्री।

    ./ या ../ से शुरू होने वाला पथ वर्तमान कार्य निर्देशिका के सापेक्ष है। दिए गए पथ को काम करने वाले पेड़ की रूट निर्देशिका के सापेक्ष रूपांतरित किया जाएगा। यह एक प्रतिबद्ध या पेड़ से एक ब्लॉब या पेड़ को संबोधित करने के लिए सबसे उपयोगी है जिसमें एक ही वृक्ष संरचना कार्यरत पेड़ के रूप में होती है।

ध्यान दें कि "< पथ >" यहाँ है अपनी परियोजना के शीर्ष निर्देशिका को पूर्ण पथ रिश्तेदार है, यानी .git/ निर्देशिका के साथ निर्देशिका। (या होने के लिए अधिक सटीक करने के लिए "< संशोधन >" (सामान्य रूप में किसी भी < पेड़-ish >, यानी कुछ है कि का प्रतिनिधित्व करता है हो सकता है जो पेड़))

आप वर्तमान के लिए पथ रिश्तेदार उपयोग करना चाहते हैं निर्देशिका, आपको वर्तमान निर्देशिका से ऊपर जाने के लिए "./ < पथ >" वाक्यविन्यास (या "../ < पथ >" का उपयोग करने की आवश्यकता है।

संपादित 2015-01-15: रिश्तेदार पथ सिंटैक्स के बारे में जानकारी नहीं जोड़ी गई


आप निम्न स्तर (पाइपलाइन) का उपयोग कर एक ही आउटपुट ज्यादातर मामलों में प्राप्त कर सकते हैं git cat-file आदेश:

prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp 
+3

मुझे एक पूर्ण प्रति में दिलचस्पी है, लेकिन गिट-शो मुझे केवल अंतर दिखाता है .. मैंने --pretty विकल्प के साथ खेलने की कोशिश की है .. प्रॉम्प्ट> गिट शो --pretty = fuller HEAD^main.cpp लेकिन इसे हल नहीं किया गया। – neoneye

+4

"गिट शो HEAD^main.cpp" (HEAD^और main.cpp के बीच की जगह के साथ) है "गिट शो हेड ^: main.cpp" (_colon_ ':' के साथ HEAD^और main.cpp के बीच)। –

+0

हम्म, कॉलन के साथ मुझे यह त्रुटि दिखाई देती है, इसलिए मैंने सोचा कि कोलन एक गलती थी। हाँ ऐसा लगता है जैसे कोलन जाने का रास्ता है, लेकिन मैं इसे कैसे हल करूं? प्रॉम्प्ट> गिट शो हेड ^: main.cpp घातक: संदिग्ध तर्क 'HEAD ^: main.cpp': अज्ञात संशोधन या पथ संख्या काम करने वाले पेड़ में टी। संशोधनों से पथ अलग करने के लिए '-' का उपयोग करें प्रॉम्प्ट> – neoneye

19

बस जकूब के उत्तर में जोड़ने के लिए: आपको फ़ाइल को स्किम करने में रुचि रखने पर केवल > के साथ आउटपुट को रीडायरेक्ट करने की आवश्यकता नहीं है, टर्मिनल में सामग्री। आप बस $ git show 58a3db6:path/to/your/file.txt चला सकते हैं।

+1

मुझे लगता है कि आपको इस कमांड में स्लैश शुरू करने की आवश्यकता नहीं है 'गीट शो 58a3db6: पथ/से/your/file.txt' –

0

गिट शो कमांड मेरे लिए काम नहीं करता है (1.6.4.msysgit का उपयोग करके)। शायद विंडोज पथ विभाजक चरित्र के साथ कुछ करने के लिए?

मैं बस डाउनलोड कर रहा हूं और QGit का उपयोग कर रहा हूं .... बहुत आसान!

+1

मैंने साइगविन गिट में स्विच किया लेकिन मैं थोड़ी देर के लिए msysgit पर था और मैंने देखा कि चीजें जैसे' गिट चेकआउट HEAD^'काम नहीं करते क्योंकि '^' स्पष्ट रूप से एक विशिष्ट विंडोज सेमीडी सत्र में कुछ विशेष अर्थ है। लेकिन 'गिट चेकआउट "हेड ^"' ने काम किया है, तो शायद आप 'गिट कैट-फाइल ब्लॉब' जैसे कुछ कर सकते हैं। HEAD ^: main.cpp "' msysgit में। – MatrixFrog

+1

'HEAD ^' 'HEAD ~ 1' के लिए सिर्फ एक उपनाम है, बाद वाला विंडोज के साथ काम करेगा। – Perleone

+0

आप हेड ~ का उपयोग कर सकते हैं ... 1 की आवश्यकता नहीं है – JoelFan

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