2009-10-10 5 views
15

मैं Git में स्थानीय विषय शाखाओं का एक बहुत का उपयोग करें, और कभी कभी के कारण समस्याओं rebase विषय शाखाओं के बीच निर्भरता के साथ खत्म। उदाहरण के लिए, की तरह एक संरचना के साथ:रिबेसिंग निर्भर विषय शाखाओं

master ---> featureA ---> featureB 
        \--> featureC 

तो master परिवर्तन और मैं जब featureA रिबेसिंग बाद में तो, पर featureA (साथ ही साथ और कभी कभी रोमांचक नए लोगों को) एक ही संघर्ष से चलाता है featureB रिबेसिंग क्योंकि (और संकल्प) संघर्ष मिलता है यह featureA शाखा से पैच को फिर से लागू करने का प्रयास करता है। यह मानते हुए कि featureA और featureB के बीच वास्तविक पैच स्पष्ट रूप से लागू होंगे यदि चेरी-चुने गए हैं, तो इस स्थिति में featureA और featureB के बीच सभी कामों को चुनने के साथ ही इस स्थिति में एक रिबेज करने का कोई तरीका है?

+0

यह भी देखें [कैसे मैं एक संपूर्ण उप-इतिहास को पुनर्जीवित करूंगा - कई शाखाएं, उनके बीच कुछ लिंक विलय से उत्पन्न होते हैं] (http://stackoverflow.com/a/9706495/94687)। उस समाधान का अप्रिय हिस्सा विषय शाखा को रीसेट करने की ज़रूरत है, बाद में नए पुनर्निर्मित कामों को रेफरी करता है। –

उत्तर

17

featureA रिबेसिंग के बाद, आप

git rebase --onto featureA oldFeatureA featureB 

संभालने oldFeatureA का प्रतिनिधित्व करता है featureA की नोक पर प्रतिबद्ध इससे पहले कि आप रिबेस (आप या तो किसी अन्य शाखा वहाँ रख सकते हैं या सिर्फ याद हैश प्रतिबद्ध) कर सकते हैं।

यह मूलतः के रूप में ही किया जाना चाहिए चेरी उठा प्रत्येक ए

Documentation on git-rebase की रिबेस संस्करण पर ए और बी के बीच प्रतिबद्ध (क्या कुछ और अधिक जटिल रिबेस आपरेशनों के दौरान होता है के कुछ उपयोगी सचित्र स्पष्टीकरण भी शामिल है)

+0

उत्कृष्ट, धन्यवाद। मुझे पता चला कि --onto को ऐसा लगता है कि यह काम करना चाहिए, लेकिन आधार के रूप में पुरानी नोक का उपयोग करना मेरे लिए नहीं हुआ था। इसके बजाय – Kai

+4

'oldFeatureA', यह संभव' उपयोग करने के लिए featureA @ {1} ', यह सोचते हैं कि रिबेस कि branche करने के लिए पिछले परिवर्तन किया गया होना चाहिए। अन्यथा 'की तरह @ कुछ का उपयोग {2}' '@ {3}', या '@ {एक घंटे पहले}' – Ropez

4

भविष्य के लिए, यदि आप अन्योन्याश्रित विषय शाखाओं में से बहुत कुछ के साथ काम करते हैं, शायद आप Git विषय शाखाओं, शाखा प्रति एक पैच का उपयोग कर पैच कतार प्रबंधन करने के लिए TopGit (README), एक उपकरण का उपयोग पर विचार करना चाहिए; या वैकल्पिक रूप से एक से अधिक विषय शाखाओं का प्रबंधन करने के लिए एक उपकरण।

उदा। देखें topgit Means Never Having to Wait for Reviews ब्लॉग पोस्ट।

+0

TopGit पर इशारा करते हुए के लिए धन्यवाद! टॉपगिट सही चीज़ पर लक्ष्य रखता है: परस्पर निर्भर शाखाओं को बनाए रखना। ** लेकिन क्या टॉपजीट में मेरी परस्पर निर्भर विषय शाखाओं को एक नए अपस्ट्रीम राज्य पर पुनर्जीवित करने की सुविधा है? ** यदि ऐसा हो सकता है, तो मैं समीक्षा के लिए शाखाओं के रूप में अपने पैच को विकसित और तैयार करने के लिए टॉपगिट का उपयोग कर सकता हूं और अपस्ट्रीम द्वारा संभावित खींच सकता हूं। –

+0

यह भी देखें ["रीबेस-आधारित टॉपगिट"] के बारे में कुछ चर्चा (http://git.661346.n2.nabble.com/branch- निर्भरता-td6641429.html): "मुझे लगता है कि एक नई प्रणाली 'होना चाहिए 'रीबेज' आधारित, टॉपगिट की तरह विलय नहीं है " –