2011-10-04 16 views
15

गिट संस्करण 1.7.5.4शाखाओं में विलय, कोई फर्क नहीं पड़ता कि आप किस में विलय करते हैं?

मेरे पास लगभग 5 शाखाएं हैं। सभी एक ही प्रारंभिक शाखा से।

मैं एक साथ 2 शाखाओं को मर्ज करना चाहता हूं। कहें, शाखा 1 और शाखा 2। इन शाखाओं में बहुत अंतर हैं।

मैं वर्तमान में शाखा 1 पर काम कर रहा हूं और मुझे अभी एहसास हुआ है कि मैंने शाखा 2 में कुछ बदलाव किए हैं जिन्हें मैं शाखा 1 में चाहता हूं।

विलय करने का सबसे अच्छा तरीका क्या है?

checkout branch2 and merge branch1 

या

checkout branch1 and merge branch2 

या यह ऐसा मामला है जिस शाखा आप की जरूरत एक और शाखा के साथ विलय करने के लिए चेकआउट करने के लिए नहीं है?

उत्तर

16

आमतौर पर इससे कोई फर्क नहीं पड़ता कि दोनों शाखाएं विषय या फीचर शाखाएं हैं।

हालांकि, यदि आपके पास एकीकरण शाखा या शाखा है जो प्रकाशित किया गया है, तो आप निश्चित रूप से लंबे समय तक जीवित एकीकरण शाखा का उपयोग करना चाहते हैं, जिसने चेक आउट किया है और दूसरे को इसमें विलय कर दिया है।

इसका कारण यह है कि विलय प्रतिबद्धता पहली मूल प्रतिबद्धता को मुख्य शाखा से आने वाले व्यक्ति के रूप में चिह्नित करेगी। उस शाखा के इतिहास के लिए आपका पेड़-ईश विनिर्देश अब आसान है।प्रतिबद्ध है कि इस शाखा में 4 अंतिम बार खोजने के लिए, आप बस

git show head~4 

यदि आप अन्य शाखा से कहीं बीच में विलय कर दिया, आप स्पष्ट रूप से दूसरा प्रतिबद्ध करने के लिए स्विच करने के लिए जहाँ कहीं भी मर्ज अन्य किया गया था के लिए होता है रास्ता:

git show head^^2^^ 

इससे किसी अन्य कारण से प्रमुख शाखाओं में समस्याएं पैदा हो सकती हैं; उन्हें विषय या फीचर शाखाओं में विलय करने के लिए "बैक विलय" के रूप में जाना जाता है और यह एक अच्छा विचार नहीं है। मुझे लिनस टोरवाल्ड्स ने अपने शीर्ष पर उड़ाते हुए याद किया जब योगदानकर्ता ने ऐसा किया। इससे उन्हें स्पष्ट रूप से अलग करने की इजाजत नहीं दी जाएगी कि वह एक प्रमुख संशोधन के लिए कौन सी विशेषताओं को विलय करना चाहता था क्योंकि फीचर शाखाएं पुराने परीक्षण विलय में लाएंगी जिसमें वह चीजें शामिल नहीं थीं जो वह अब नहीं चाहती थीं।

तो अंत में, यदि एक शाखा अधिक महत्वपूर्ण है और केवल एक सुविधा से अधिक है, तो इसे जांचें और वहां से विलय करें। आप इसे इतिहास को आसानी से देख पाएंगे क्योंकि आप जानते हैं कि यह पहला माता-पिता हमेशा होता है जहां वह शाखा पहले थी। यदि आप नहीं करते हैं, तो आपको विलय प्रतिबद्ध संदेशों को पढ़ने पर भरोसा करना होगा और यह मजेदार नहीं है। :)

मैं जो शाखाओं रखने का एक सख्त तरीका संगठित चलता बीपीएफ बारे में एक लेख लिखा है: http://dymitruk.com/blog/2012/02/05/branch-per-feature/

+1

पहले माता-पिता पथ उपयोगी –

+0

चीयर्स रखने के बारे में +1 अच्छा बिंदु! ये गलतियाँ इतिहास नेविगेशन को एक दुःस्वप्न बनाती हैं। –

3

मुझे लगता है कि आप केवल अजीब प्रतिबद्धता चुनने के बजाय पूरी शाखा को विलय करना चाहते हैं। इसके अलावा, मैं नीचे जो कह रहा हूं वह इस very helpful blog post by Junio C. Hamano पर आधारित है, गिट रखरखाव, जिसे मैं दृढ़ता से पढ़ने की अनुशंसा करता हूं यदि आप शाखाकरण के दर्शन के बारे में और जानना चाहते हैं।

दुर्भाग्य से, वहाँ, आपके सवाल इस बारे में ध्वनि सलाह देने के लिए में वास्तव में पर्याप्त जानकारी नहीं है, क्योंकि सवाल प्रत्येक शाखा की उद्देश्य पर निर्भर करता है। एक आम परिदृश्य में, उदाहरण के लिए, किसी के पास master शाखा हो सकती है जिसे किसी को हमेशा से स्थिर रिलीज़ उत्पन्न करने में सक्षम होना चाहिए। जब कोई सॉफ़्टवेयर में कोई नई सुविधा जोड़ना चाहता है, तो वे awesome-feature नामक मास्टर से विषय शाखा बना सकते हैं, जिसे वे संभवतः रीबेज करते हैं, पूरी तरह से परीक्षण करते हैं, और इसी तरह से काम करते हैं। जब सभी उस शाखा से खुश होते हैं, तो यह केवल awesome-feature को master में विलय करने का अर्थ बनाता है, न कि दूसरी तरफ। (दूसरे तरीके से गोल का अर्थ यह होगा कि, मास्टर में सब कुछ "भयानक सुविधा" को लागू करने में मदद करता है, जिसके लिए विषय शाखा है।) आप केवल बता सकते हैं कि किस तरह से दौर सही है, हालांकि, क्योंकि हम प्रत्येक शाखा के उद्देश्य को जानते हैं ।

ब्रांचिंग और विलय गिट में इतना आसान है कि यह highly structured से rather simpler तक, कई अलग-अलग वर्कफ़्लो का समर्थन करता है, पूरी तरह से असंरचित। "पूरी तरह से संरचित" द्वारा, मेरा मतलब है कि विकास की कई अलग-अलग शाखाएं हैं, और लोग किसी विशेष तरीके से उन विशेषताओं को शामिल करने के लिए जो कुछ भी तरीके से चाहते हैं, उनके बीच विलय करते हैं - यदि आप ऐसी स्थिति में हैं, जहां स्पष्ट रूप से कोई स्पष्ट नहीं है प्रत्येक शाखा के लिए परिभाषित उद्देश्य, इससे कोई फर्क नहीं पड़ता कि आप branch1 को branch2 या अन्य तरीकों से विलय करते हैं या नहीं। हालांकि, मुझे प्रत्येक शाखा के लिए एक स्पष्ट उद्देश्य के लिए यह और अधिक सहायक लगता है, इस मामले में जिस तरह से आप दो शाखाओं को विलय करते हैं, इससे कोई फर्क नहीं पड़ता।

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