मान लीजिए कि दो शाखाएं हैं, master
और slave
, और वे एक ही फ़ाइल और एक ही पंक्ति को संपादित करते हैं। प्रारंभ में, फ़ाइल की सामग्रीगिट में विलय के बाद पैच को फिर से प्रारूपित कैसे करें?
foo bar
तो है शाखा slave
में यह
foo bar baz
बनने के लिए संपादित किया जाता है अब शाखा slave
के उपयोगकर्ता पैच (git format-patch master
) स्वरूपों और उपयोगकर्ता को भेज देता है शाखा master
। एक ही समय में, शाखा master
में एक ही फाइल संपादित किया जाता है और हो जाता है
foo bar spam eggs
पैच लागू नहीं किया जा सकता है, और master
slave
पूछता विलय और एक नया पैच बनाने के लिए। जब master
slave
में विलय हो गया है और संघर्ष हल हो गया है, तो यह पैच को दोबारा सुधारने का समय है। प्रतिबद्ध ग्राफ इस तरह दिखता है:
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
और rev2
master
और custom
शाखाओं के प्रमुखों क्रमशः, संघर्ष समाधान से संबंधित परिवर्तन शामिल नहीं है। git-diff
एक मान्य पैच स्वरूपित करता है, लेकिन संदेशों को छोड़ देता है।
मैं पैच का उपयोग करता हूं, क्योंकि अपस्ट्रीम चाहता है, और मैं वर्कफ़्लो के नियंत्रण में नहीं हूं। मुझे पैच प्रारूपित करना है जो विवाद समाधान को ध्यान में रखते हैं, क्योंकि मैं अपना रेपो भी प्रकाशित करता हूं और रीबेज नहीं कर सकता। दुर्भाग्य से, 'गिट diff', प्रतिबद्ध संदेश शामिल नहीं है। – sastanin
विलय करने का एक तरीका सिर्फ एक माता पिता है। उस से एक पैच आपको वह परिणाम मिलेगा जो आपको चाहिए। –
सिर्फ एक माता पिता के साथ विलय? यह कैसे संभव है? 'Git-merge'' को "_wowo_ या अधिक विकास इतिहास एक साथ शामिल" नहीं होना चाहिए? – sastanin