दोनों rebase(और cherry-pick) और mergeउनके फायदे और नुकसान हैं। मैं mergeयहां तर्क देता हूं , लेकिन यह दोनों को समझने लायक है। (एक वैकल्पिक, अच्छी तरह से तर्क जवाब देने वाले मामलों के लिए यहां देखें जहां rebaseप्राथमिकता दी जाती है।)
mergeअधिक पसंद किया जाता है cherry-pickऔर rebaseकारणों की एक जोड़ी के लिए।
- लूटने का काम । एक कमेटी का SHA1 पहचानकर्ता इसे न केवल अपने और बल्कि अन्य सभी के संबंध में पहचानता है जो इसे पूर्ववर्ती मानते हैं। यह आपको एक गारंटी देता है कि किसी दिए गए SHA1 पर भंडार की स्थिति सभी क्लोनों के समान है। वहाँ (सिद्धांत रूप में) कोई मौका नहीं है कि किसी ने किया है जो एक ही बदलाव की तरह दिखता है, लेकिन वास्तव में आपके भंडार को भ्रष्ट या अपहरण कर रहा है। आप अलग-अलग परिवर्तनों में चेरी-पिक कर सकते हैं और वे समान होने की संभावना है, लेकिन आपके पास कोई गारंटी नहीं है। (एक मामूली गौण मुद्दे के रूप में, नए चेरी से चुने गए कमिट अतिरिक्त स्थान ले लेंगे, अगर कोई और चेरी-पिक्स फिर से एक ही प्रतिबद्ध करता है, क्योंकि वे दोनों इतिहास में मौजूद रहेंगे, भले ही आपकी कार्य प्रतियां समान हों।)
- उपयोग में आसानी । लोग
mergeवर्कफ़्लो को काफी आसानी से समझ लेते हैं। rebaseअधिक उन्नत माना जाता है। दोनों को समझना सबसे अच्छा है, लेकिन जो लोग संस्करण नियंत्रण में विशेषज्ञ नहीं होना चाहते हैं (जिसमें मेरे अनुभव में कई सहयोगियों को शामिल किया गया है जो वे क्या करते हैं, पर बहुत अच्छे हैं, लेकिन अतिरिक्त समय बिताना नहीं चाहते हैं) एक आसान है समय बस विलय।
मर्ज-हेवी वर्कफ़्लो के साथ rebaseऔर cherry-pickविशेष मामलों के लिए अभी भी उपयोगी हैं:
mergeइतिहास से एक उलटा है। rebaseआपके इतिहास में बिखरे होने से होने वाली कमियों की एक लंबी श्रृंखला को रोकता है, जैसे कि यदि आप समय-समय पर दूसरों के परिवर्तनों में विलीन हो जाते हैं। यह वास्तव में इसका मुख्य उद्देश्य है क्योंकि मैं इसका उपयोग करता हूं। आप जिस चीज से बहुत सावधान रहना चाहते हैं , वह यह है rebaseकि आप कभी भी अन्य रिपॉजिटरी के साथ साझा नहीं करें। एक बार pushएड होने के बाद कोई दूसरा व्यक्ति इसके ऊपर प्रतिबद्ध हो सकता है, और रिबासिंग सबसे अच्छा कारण होगा जिस तरह की नकल ऊपर चर्चा की गई है। सबसे बुरी तरह से आप एक बहुत ही भ्रमित रिपॉजिटरी और सूक्ष्म त्रुटियों के साथ समाप्त हो सकते हैं यह आपको फेर्रेट करने में लंबा समय लगेगा।
cherry-pick मूल रूप से त्यागने का निर्णय लिया गया विषय शाखा से परिवर्तनों के एक छोटे उपसमूह का नमूना लेने के लिए उपयोगी है, लेकिन एहसास हुआ कि कुछ उपयोगी टुकड़े हैं।
के रूप में एक से अधिक परिवर्तन विलय पसंद करते हैं: यह सिर्फ एक बहुत सरल है। एक बार जब आप उनमें से बहुत से होने लगते हैं तो व्यक्तिगत परिवर्तनों का विलय करना बहुत थकाऊ हो सकता है। Git (और Mercurial, और Bazaar में) में मर्ज रिज़ॉल्यूशन बहुत अच्छा है। आप ज्यादातर समय लंबी शाखाओं में विलय करने वाली प्रमुख समस्याओं में नहीं चलेंगे। मैं आम तौर पर सब कुछ एक ही बार में मर्ज कर देता हूं और अगर मुझे बड़ी संख्या में संघर्ष मिलते हैं तो मैं वापस आ जाता हूं और मर्ज के टुकड़े को फिर से चलाता हूं। फिर भी मैं इसे बड़े चाव से करता हूं। एक बहुत ही वास्तविक उदाहरण के रूप में, मेरे पास एक सहकर्मी था, जिसके पास विलय के लिए 3 महीने का मूल्य था, और 250000 लाइन कोड-बेस में कुछ 9000 संघर्ष हुए। हमने जो ठीक करने के लिए किया था वह एक बार में एक महीने के मूल्य को मर्ज करने के लिए है: संघर्ष रैखिक रूप से नहीं बनता है, और इसे टुकड़ों में करने से परिणाम होता है दूर होता है9000 से कम संघर्ष। यह अभी भी बहुत काम था, लेकिन एक समय में इसे कमिट करने के लिए उतना प्रयास नहीं किया गया।