2012-01-26 5 views
12

मान लीजिए कि मेरे गिट भंडार में प्रारंभ में दो शाखाएं हैं: फू और बार।एक विलय प्रतिबद्धता

 
... ─ Foo 

... ─ Bar 

मैं तीसरी शाखा, फूबार बनाता हूं जिसमें मैं दो अन्य शाखाओं का विलय करता हूं।

 
... ─ Foo ──┐ 
      FooBar 
... ─ Bar ──┘ 

फ़ूबार अब फू और बार दोनों से आगे है। इसके बाद, मैं कुछ और काम करता हूं, केवल फू पर कुछ बार करता हूं।

 
... ── A ───┬── B ── C ── D ── Foo 
      FooBar 
... ─ Bar ──┘ 

सवाल यह है: के बाद से शाखा FooBar के पहले माता-पिता नहीं रह गया है फू है, मैं rebase कर सकते हैं मर्ज शाखा FooBar में प्रतिबद्ध फिर अपने दो माता-पिता के रूप में फू और बार के लिए? दूसरे शब्दों में, क्या मैं अपरिवर्तित बार के साथ पहले विलय किए गए FooBar में Foo में विकास को शामिल कर सकता हूं?

 
... ── A ── B ── C ── D ── Foo ──┐ 
           FooBar 
... ─ Bar ───────────────────────┘ 
+0

यह भी देखें [अभिभावक सूचक बदलने के लिए गिट-प्रतिस्थापन का उपयोग करके] (http://stackoverflow.com/a/3811217/90527), हालांकि इसके अन्य परिणाम हैं। – outis

+0

यह भी देखें [गिट विलय के बाद गिट विलय के बाद मैं गिट विलय का उपयोग कैसे करूं?] (Http://stackoverflow.com/q/4152936/90527) – outis

उत्तर

1

आप बदल रहा है क्या FooBar को परिभाषित करता है बिना शाखा FooBar तहत rebase नहीं कर सका। आप क्या कर सकते हैं FooBar और Foo मर्ज करें। उस वही सामग्री होगी जो आप चाहते हैं।

+0

हां, लेकिन बिंदु मर्ज काम से बचने के लिए है। यही कारण है कि मैं 'शाखाफूबार' को पुनर्जीवित करना चाहता हूं। – nccc

+0

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

+0

आप सही हैं, यह पर्याप्त स्पष्ट नहीं था। मैं एक * 2 * विलय प्रतिबद्धता से बचना चाहता हूं। 'शाखाफूबार हमेशा एक विलय प्रतिबद्ध होगा, लेकिन मैं चाहता हूं कि यह 'ब्रांचफू' और 'शाखाबार' के साथ माता-पिता के रूप में * केवल * विलय प्रतिबद्धता हो। – nccc

0

आप मूल रूप से पहले किए गए विलय के सभी निशान मिटाने की कोशिश कर रहे हैं।

आप वास्तव में फेंक करने के लिए सभी (और कार्यशील निर्देशिका में) करता है कि केवल FooBar में मौजूद चाहते हैं, तो आगे बढ़ना इस प्रकार है: पहला git checkout FooBar करते हैं, तो Git भूल के बारे में यह इतिहास है बनाने के लिए और कर git reset --hard Foo (यदि आप के इरादे BarFoo में विलय करें)। फिर आप git merge Bar के साथ विलय को फिर से बनाते हैं।

12

मुझे एहसास है कि यह एक पुराना विषय है, लेकिन जब से मुझे इसी तरह की स्थिति का सामना करते हुए यह प्रश्न मिला, तो मैं यह भी बता सकता था कि मैंने अंत में क्या उपयोग किया था।

git checkout FooBar 
git rebase -p --onto Foo A 

मैंने मूल प्रश्न से नामों का उपयोग करने की कोशिश की। ध्यान दें कि विशेष रूप से A का मतलब है कि एसीआई कला में ए के रूप में चिह्नित किया गया है। आप संभवतः प्रतिबद्धता के हैश का उपयोग करेंगे या प्रतिबद्धता को इंगित करने के किसी अन्य तरीके से जहां शाखा Foo और FooBar मूल रूप से अलग हो।

-p ध्वज --preserve-merges के रूप में भी जाना जाता है और यह जो कुछ भी कहता है वह बहुत कुछ करता है।

ध्यान दें कि शाखा Bar यहां कोई भूमिका निभाती नहीं है ताकि काम की रेखा नामित शाखा हो या फिर नहीं - इससे कोई फर्क नहीं पड़ता।

+3

ध्यान दें कि यह विलय प्रतिबद्धता में किए गए कोई भी परिवर्तन नहीं रखेगा। – Tgr

+2

धन्यवाद, इससे हमें बहुत मदद मिली। यह ध्यान रखना महत्वपूर्ण है कि 'ए' लक्ष्य शाखा की आखिरी प्रतिबद्धता है जिसे अभी भी मूल विलय में शामिल किया गया था। – Dibbeke

+1

यह स्वीकार्य उत्तर होना चाहिए! – wutzebaer

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

  • कोई संबंधित समस्या नहीं^_^