2011-08-27 16 views
11

मान लीजिए कि मुझे कुछ औसत-लंबाई (कई दिन) रिफैक्टरिंग करने की आवश्यकता है।एक ही परिणाम में मेरे परिवर्तनों को कैसे स्क्वैश करें और मास्टर शाखा में जाएं?

मैं मास्टर से "माइब्रैंच" बनाता हूं, काम करता हूं, कभी-कभी मैं मास्टर से माइब्रैंच में विलय करता हूं (कुछ अन्य टीम के सदस्यों को काम जारी रखना चाहिए, और शायद मुझे उनके बदलावों की आवश्यकता होगी)। और थोड़ी देर के बाद मैं अपने परिवर्तन वापस मास्टर में विलय करने के लिए तैयार हूं।

मैं (, क्योंकि वे मेरी नहीं गुरु से मर्ज के साथ changesets को छोड़कर) चेरी लेने एकल परिणाम मेरे काम का मास्टर में प्रतिबद्ध केवल अपने परिवर्तनों छुटकारा पाने के लिए सक्षम होंगे और? क्या परिदृश्य करना संभव है?

उत्तर

7

हाँ। आप इसे एक छोटे परीक्षण भंडार के साथ पुष्टि कर सकते हैं। बस कार्य करें:

git rebase --interactive master mybranch 

और पहली को छोड़कर सभी लाइनों के लिए squash चुनें। फिर आप master चेकआउट करें और mybranch का एक नियमित फास्ट-फॉरवर्ड विलय करें।

+0

ओह करना चाहते हैं, तो यह और भी तेजी से आगे एक हो जाएगा? चेरी के लिए आवश्यकता के बिना इसे उठाओ? "पहले को छोड़कर सभी लाइनों के लिए" --- इस मामले में 'पहला' क्या है?और क्या मैं विलय को छोड़कर सभी को स्क्वैश कर सकता हूं (मुझे लगता है कि मैं काम की प्रक्रिया में मास्टर से कई विलय करूँगा) – zerkms

+0

सही। रीबेस हमेशा एक तेजी से आगे बढ़ने योग्य इतिहास पैदा करता है। अनिवार्य रूप से आप विलय से पहले विलय से पहले सभी संघर्षों को हल करते हैं। –

+0

ठीक है, अच्छा, धन्यवाद – zerkms

4

रिबेसिंग के बाद, वहाँ पिछले "mybranch" में उन लोगों के प्रतिबद्ध

मुझे क्या होगा और अधिक सुरक्षा हो सकता है कि

git checkout mybranch 

एक शाखा बनाएँ (यह वास्तव में एक है पर कोई चर्चा नहीं होगी रिबेसिंग प्रयोजन के लिए अस्थायी शाखा)

git checkout -b movingToMaster 

कोशिश rebase करने movingTomastermaster

को
git rebase -i master 

एक संपादक आप जो प्रतिबद्ध उठाया जाना चाहिए, या कुचल या संपादित पूछ बाहर प्रेरित किया जाएगा ...

संपादित करें कि फ़ाइलें, आपके मामले में, पहली पंक्ति रखना चाहिए ही और अन्य रहना लाइन को "स्क्वैश" में "पिक" बदलना चाहिए, यदि आप चाहें तो अपना प्रतिबद्ध संदेश संशोधित कर सकते हैं। उस फ़ाइल पर पर्याप्त परिवर्तन करने के बाद इसे सहेजें।

अर्थात

pick 0a81405 Bug Fix 1 
pick 91be655 Bug Fix 2 
pick 1200fc7 Bug Fix 3 
pick 1211fb7 Bug Fix 4 
pick ba77fdf Bug Fix 5 

यह सहेजें

pick 0a81405 Bug Fix 1 
squash 91be655 Bug Fix 2 
squash 1200fc7 Bug Fix 3 
squash 1211fb7 Bug Fix 4 
squash ba77fdf Bug Fix 5 

को बदलें। तब

git checkout master 

अपने master शाखा movingTomaster शाखा को फास्ट का उपयोग करके आगे विलय

git merge movingTomaster 

नोट ले जाएँ: के बाद से यह केवल एक फास्ट फॉरवर्ड मर्ज है और अपने इतिहास को अव्यवस्थित नहीं होगा यह कोई नुकसान नहीं होगा।

अपने movingTomaster शाखा हटाएँ अगर आप

git branch -D movingTomaster 
+0

हाँ, आपको मिल गया। धन्यवाद। लेकिन लाइन नहीं मिल सकती है "और अपनी मास्टर शाखा को टॉमस्टर शाखा में ले जाने के लिए ले जाएं" – zerkms

+0

@zerkms: उस समय, आपकी मास्टर शाखा में अभी भी "एकल" प्रतिबद्धता नहीं है। आपकी चलती टोस्टर शाखा अब मास्टर के आगे एक और प्रतिबद्ध होना चाहिए। (आप gitk कमांड द्वारा विज़ुअलाइज़ कर सकते हैं) आपको अपनी मास्टर शाखा को एक ही प्रतिबद्ध बिंदु पर ले जाने की आवश्यकता है, जिसमें टॉस्टर –

+0

चल रहा है कि "चाल" कैसे किया जा सकता है? क्या यह सिर्फ एक विलय नहीं है (इस मामले में तेजी से अग्रेषित)? – zerkms

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