2011-12-14 7 views
7

मैं यह पता लगाने की कोशिश कर रहा हूं कि रीबेस को तीन-तरफा विलय की आवश्यकता क्यों है। उदाहरण के लिए, अगर हमगिट रिबेस को 3-तरफा विलय की आवश्यकता क्यों होती है?

A1 - A2 
\ 
    B1 

है और मैं बी 1 की जाँच की है, और मैं प्रदर्शन करने के लिए करना चाहते हैं:

git rebase A2 

Git क्यों मर्ज करता ए 2, बी 1 और A1? ए 2 और बी 1 पर्याप्त क्यों नहीं होगा? मेरा मतलब है, ए 2 और बी 1 के रूप में प्रतिबद्धता के रूप में पेड़ के पूर्ण वर्तमान स्नैपशॉट शामिल हैं?

+1

धन्यवाद, यही वह है जो मैं अपने प्रश्न के साथ दिखाने की कोशिश कर रहा था। – worker1138

उत्तर

7

मर्ज करने के लिए, Git पता लगाने के लिए की जरूरत है, वास्तव में क्या आम पूर्वज (A1) के बाद से दो शाखाओं में हुआ था। आप सही तरीके से कहा है के रूप में, Git संग्रहीत करता करता/पेड़ की फोटो तो एक वास्तविक परिवर्तन सेट प्राप्त करने के लिए, यह A2A1 को A1 करने और B1 तुलना और फिर उन अलग-अलग परिवर्तन सेट विलय करने के लिए है।

एक ही बात एक रिबेस में होती है। पर A2 के परिवर्तन सेट को लागू करने के लिए, हमें सबसे पहले A1 और A2 के बीच अंतर से उस परिवर्तन सेट की गणना करने की आवश्यकता है। और फिर हम इसे B1 पर लागू कर सकते हैं। आप रीबेज के बारे में सोच सकते हैं जैसे पैच फ़ाइलों की स्वचालित पीढ़ी के समान कुछ। सबसे पहले यह उन सभी पैच फ़ाइलों को पुरानी शाखा से उत्पन्न करता है और फिर उन्हें वर्तमान सिर पर लागू करता है।

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

+0

धन्यवाद, यह बहुत अच्छी समझ में आता है। – worker1138

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