2011-06-17 10 views
5

मान लीजिए कि दो शाखाएं हैं, master और slave, और वे एक ही फ़ाइल और एक ही पंक्ति को संपादित करते हैं। प्रारंभ में, फ़ाइल की सामग्रीगिट में विलय के बाद पैच को फिर से प्रारूपित कैसे करें?

foo bar 

तो है शाखा slave में यह

foo bar baz 

बनने के लिए संपादित किया जाता है अब शाखा slave के उपयोगकर्ता पैच (git format-patch master) स्वरूपों और उपयोगकर्ता को भेज देता है शाखा master। एक ही समय में, शाखा master में एक ही फाइल संपादित किया जाता है और हो जाता है

foo bar spam eggs 

पैच लागू नहीं किया जा सकता है, और masterslave पूछता विलय और एक नया पैच बनाने के लिए। जब masterslave में विलय हो गया है और संघर्ष हल हो गया है, तो यह पैच को दोबारा सुधारने का समय है। प्रतिबद्ध ग्राफ इस तरह दिखता है:

slave:    master: 

foo bar baz spam eggs 
    |    \ 
    |    \ 
    |    foo bar spam eggs 
    |     | 
foo bar baz    | 
     \     | 
     \    | 
     +--------- foo bar 

नवीनतम प्रतिबद्ध (मर्ज) slave पर लगता है कि:

@@@ -1,1 -1,1 +1,1 @@@ 
- foo bar baz 
-foo bar spam eggs 
++foo bar baz spam eggs 

हालांकि, अगर हम अब git format-patch master चलाने के लिए, हम अभी भी बिल्कुल वैसा ही पैच के रूप में पहले मिलता है, जो विलय और संघर्ष समाधान को खाते में नहीं लेता है:

@@ -1 +1 @@ 
-foo bar 
+foo bar baz 

आप एक पैच को कैसे प्रारूपित करते हैं जो नवीनतम मास्टर के खिलाफ लागू होगा? मैं इसे rebase के बिना करना चाहता हूं।

अद्यतन: git format rev1..rev2, जहां rev1 और rev2master और custom शाखाओं के प्रमुखों क्रमशः, संघर्ष समाधान से संबंधित परिवर्तन शामिल नहीं है। git-diff एक मान्य पैच स्वरूपित करता है, लेकिन संदेशों को छोड़ देता है।

उत्तर

1

आप पैच का उपयोग क्यों कर रहे हैं? आपको रिपोज़ के बीच धक्का देना और खींचना चाहिए।

एक विलय ऐसा कुछ नहीं है जिसे आप पैच बना सकते हैं। यह केवल पहले माता-पिता का पालन करेगा। git diff का उपयोग कर आप जो चाहते हैं उसे प्राप्त कर सकते हैं और बीच में अंतर करने के लिए 2 अलग-अलग कामों को निर्दिष्ट करते समय पैच के लिए स्वरूपण कर सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

+0

मैं पैच का उपयोग करता हूं, क्योंकि अपस्ट्रीम चाहता है, और मैं वर्कफ़्लो के नियंत्रण में नहीं हूं। मुझे पैच प्रारूपित करना है जो विवाद समाधान को ध्यान में रखते हैं, क्योंकि मैं अपना रेपो भी प्रकाशित करता हूं और रीबेज नहीं कर सकता। दुर्भाग्य से, 'गिट diff', प्रतिबद्ध संदेश शामिल नहीं है। – sastanin

+0

विलय करने का एक तरीका सिर्फ एक माता पिता है। उस से एक पैच आपको वह परिणाम मिलेगा जो आपको चाहिए। –

+0

सिर्फ एक माता पिता के साथ विलय? यह कैसे संभव है? 'Git-merge'' को "_wowo_ या अधिक विकास इतिहास एक साथ शामिल" नहीं होना चाहिए? – sastanin

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