2013-10-31 8 views
18

मेरे शाखाओं हिलाने की नकल कर रहे हैं:Git रिबेस: बजाय

o---o support.2013.16 
    \ 
     o---o---o---o---o master 
         \ 
         o---o---o hotfix/A 

मैं support.2013.16 को हॉटफिक्स/ए कॉपी करना होगा। मैं चेरी पिकिंग के बारे में पता कर रहा हूँ, लेकिन यह

git rebase --onto support.2013.16 master hotfix/A 

लेकिन जैसे कुछ करने के लिए एक शाखा चलती लेकिन इसके बजाय यह कॉपी किए बिना संभव है?

+5

के साथ छोड़ देता है आप बी 'पहले' Git चेकआउट इस्तेमाल कर सकते हैं नई शाखा नाम बनाने के लिए है, तो रिबेस का उपयोग करें। मूल 'हॉटफिक्स/ए' शाखा अपरिवर्तित बनी रहेगी। – qqx

उत्तर

35

गिट rebase वास्तव में मूल शाखा को एक नए में कॉपी करता है; लेकिन क्योंकि यह शाखा के सिर को ले जाता है, यह एक प्रतिलिपि के बजाय एक कदम की तरह लगता है। यदि आपने मूल शाखा में अतिरिक्त शाखा प्रमुख जोड़ने के लिए git branch का उपयोग किया है, तो git rebase ने प्रतिलिपि बनाई गई प्रतिलिपि बनाने के बाद भी आपको मूल शाखा तक आसानी से पहुंच प्राप्त होगी। तो अपने उदाहरण में

git branch rebased-A hotfix/A 
git rebase --onto support.2013.16 master rebased-A 

 o---o---o rebased-A (hotfix/A') 
    /
o---o support.2013.16 
    \ 
     o---o---o---o---o master 
         \ 
         o---o---o hotfix/A 
+1

ध्यान दें कि यह अन्य ('गिट चेकआउट-बी') समाधान जैसा ही है। (मुझे प्रतिबद्ध उत्तर पेड़ के कारण यह उत्तर बेहतर लगता है। :-)) – torek

7

आप एक नई शाखा बना सकते हैं:

git checkout -b hotfix/A-support hotfix/A 

और इसके बजाय यह rebase। तो आपके पास दो शाखाएं होंगी। शायद आप इसे support शाखा में विलय करने के बाद शाखा छोड़ने का निर्णय ले सकते हैं।

वैकल्पिक रूप से, आप hoftix/A को git merge-base support.2013.16 master पर रीबेस कर सकते हैं और फिर आप hotfix/A दोनों शाखाओं में आसानी से विलय कर सकते हैं। यह आपको सुंदर इतिहास देगा, कोई डुप्लिकेट नहीं करता है।

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