2015-12-15 7 views
8

क्या यह सच है कि git rebasegit merge से विवादों के लिए अधिक प्रवण है? मुझे लगता है कि इससे पहले कि सुनना है और यह मैं anecdata पर यहाँ आधारित अटकलें हूँ this postक्या गिट रिबेस गिट विलय से अधिक संघर्ष पैदा करता है?

में संदर्भित है, लेकिन मैं सामान्य चिंता संदेह रिबेसिंग दो प्राथमिक स्थानों की वजह से उपजी चारों ओर: के यांत्रिकी के कारण

  1. Git रिबेस, मर्ज संघर्ष अधिक लगातार और उचित रूप में कठिन करने के लिए विस्तार में जाने नहीं करता

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

मैंने इस बिंदु को सुना और समझ लिया है कि रीबेज रीप्ले प्रतिबद्धता से प्रतिबद्ध होते हैं, आप कई बार एक ही संघर्ष के साथ खत्म हो जाएंगे, लेकिन मैंने कभी इसका सामना नहीं किया है। शायद rerere व्यवहार अब git rebase में डिफ़ॉल्ट है?

मैं अपनी टीम में एक रिबेस नीति का प्रस्ताव देने की कोशिश कर रहा हूं लेकिन यदि यह सही है तो मैं इस मुद्दे को हल करना चाहता हूं।

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

उत्तर

7

यदि आपके पास एकाधिक कार्य हैं तो आप एक रिबेस के साथ अधिक संघर्ष के साथ समाप्त हो जाएंगे। ऐसा इसलिए है क्योंकि जब आप रिबेस करते हैं तो आपको प्रत्येक प्रतिबद्धता के लिए संघर्ष हल करना होगा। इसका मतलब है कि यदि आप अपने गुरु से आगे की एक शाखा को पुनर्जीवित करने का प्रयास कर रहे हैं और आपने उन 5 में से पहले में विलय संघर्ष शुरू किया है, तो आपको निम्नलिखित में से प्रत्येक में उस संघर्ष को हल करना होगा।

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

मान लें कि आपके पास 5 काम हैं जो आप मास्टर में विलय करना चाहते हैं, लेकिन यह केवल एक विशेषता है जिसे एक वर्णनात्मक संदेश के साथ आसानी से वर्णित किया जा सकता है।

git fetch 
git merge origin/master 
git reset --soft origin/master 
git commit 

यदि आप सिर्फ एक ही प्रतिबद्धता चाहते हैं तो यह आसान तरीका है और रीबेजिंग के समान ही काम करता है।

+2

केवल एक एकल (गैर-विलय) प्रतिबद्धता बनाने का एक आसान तरीका है 'गिट मर्ज - स्क्वैश मूल/मास्टर' और' गिट प्रतिबद्ध 'का उपयोग करना। – sschuberth

+0

क्या आप अधिक विस्तार से समझा सकते हैं कि मुझे कई बार संघर्ष को हल करने की आवश्यकता क्यों है? ब्रांच किए गए फ़ाइल foo को ब्रांच किए जाने के बाद 'मास्टर' में पहली प्रतिबद्धता कहें। और कहें कि मेरी शाखा पर पहली प्रतिबद्धता ने भी फू को छुआ, यह एक संघर्ष बनाता है जो मास्टर पर पुन: प्रयास करते समय होगा, लेकिन यदि मास्टर में दूसरी प्रतिबद्धता बार को छूती है और मेरी शाखा में मेरी दूसरी प्रतिबद्धता फू को छूती है, तो मुझे क्यों आवश्यकता होगी एक ही संघर्ष को फिर से हल करने के लिए? – Hilikus

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