2012-10-12 5 views
10

पर पैच बनाने और लागू करने के लिए 'गिट शो' का उपयोग करके हाल ही में मैं git show <hash> का उपयोग बाद के संदर्भ के लिए भिन्न बनाने के लिए कर रहा हूं क्योंकि git diff <hash>~ <hash> से टाइप करना आसान है और यह प्रतिबद्ध जानकारी (टाइमस्टैम्प, उपयोगकर्ता, हैश, टिप्पणी दिखाता है)। पैच को लागू करने के लिए आप git apply <filename> का उपयोग कर सकते हैं।एकाधिक काम

मुझे पता चला कि git show -3 एक ही अतिरिक्त जानकारी के साथ अंतिम तीन काम दिखाएगा। हालांकि, git apply इसे सभी को कार्यस्थल निर्देशिका में अस्थिर परिवर्तन के रूप में स्क्वैश करेगा, और सभी प्रतिबद्ध जानकारी खो देता है।

क्या गिट में कुछ ऐसा है जो सारी जानकारी लागू करेगा? पैच को तीन फाइलों में तोड़ने, उन्हें अलग-अलग लागू करने और नई प्रतिबद्धताओं को बनाने से बस ध्वज में गुजरना बहुत आसान होगा।

उत्तर

5

आप git format-patch का उपयोग कर सकते हैं ताकि उनके मेटाडेटा (संदेश, लेखकत्व, आदि) सहित एमआईएमई ईमेल उत्पन्न हो सकें। फिर आप git am के साथ इन्हें पुनः लागू कर सकते हैं।

तो git format-patch HEAD~3 पिछले 3 कामों के लिए 3 पैच उत्पन्न करेगा, और फिर आप इन सभी को git am में पाइप कर सकते हैं। यदि आप सरल होना चाहते हैं, तो git format-patch --stdout HEAD~3 एमआईएम संदेशों को stdout पर भेज देगा, ताकि आप उन्हें 3 अलग-अलग फ़ाइलों से निपटने के बजाय जहां चाहें वहां पाइप कर सकें।

बेशक, यदि आप बाद में संदर्भ में सहेजने की कोशिश कर रहे हैं, तो उन्हें टैग क्यों न करें? फिर आप git cherry-pick का उपयोग कर उनसे काम कर सकते हैं।

+0

यह लगता है कि यह काम करेगा, हालांकि मैं करना होगा जाओ और उन पैच को फिर से करें जिन्हें मैंने पहले से ही 'गिट शो' का उपयोग कर बनाया है। चीजों को आसान बनाने के लिए मैं अब से प्रारूप-पैच का उपयोग करना शुरू कर दूंगा। कारण मैं केवल 'गीट चेरी-पिक' का उपयोग नहीं कर रहा हूं, मैं एक नए देव सर्वर पर जा रहा हूं और इस समय गिट पर केवल पढ़ने के लिए उपयोग किया जा सकता है। मेरी सभी कोड निर्देशिकाओं को स्कैप करने के बजाय मैं प्रतिलिपि बनाने के लिए पैच बना रहा हूं। – redbmk

1

इतिहास के विशिष्ट हिस्सों को भेजने के लिए git bundle आज़माएं।

3

लिनक्स में आप कर सकते हैं पाइप अपने डेल्टा-जनरेटर --- git-show या git-diff, उदाहरण के लिए --- git-apply कमांड के साथ।

  • एक विशिष्ट abcdef में की गई फ़ाइल पर संपादन लागू:

    > git show <sha1> [<path>] | git apply -3 
    > git diff <sha1-a> <sha1-b> [<path>] | git apply -3 
    

    उदाहरण (यह है भी संभावित सुरक्षित हमेशा 3-रास्ता -3 विकल्प के साथ विलय सक्षम करने के लिए):

> git show abcdef dir/file.c | git apply -3 
  • abcdef दो अलग करता की एक फ़ाइल पर अंतर लागू करते हैं और

> git diff abcdef 123456 foo.h | git apply -3

यह भी देखें: https://stackoverflow.com/a/12320940/1329340

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