मेरी सिफारिश (या, "अगर मैं श्रीमान ऑरेंज था तो मैं क्या करूंगा") git fetch
से शुरू होता है। अब मेरे पास यह मेरे रेपो में होगा, जो श्री ब्लॉन्ड ने अपने रिबेस के बाद और "गिट पुश-एफ" चलाने से ठीक पहले किया था।
M1 - M2 - M3
\ \
\ \
A1 - A2 A1' - A2'
एक महत्वपूर्ण अंतर यह है, मैं ए 2 फिरना की ओर इशारा करते अपने स्थानीय लेबल A
होगा, और दूरदराज के लेबल remotes/origin/A
ए 2 की ओर इशारा करते '(श्री गोरा यह दूसरी तरह के आसपास, स्थानीय लेबल A
की ओर इशारा करते था ए 2 'और remotes/origin/A
ए 2 को इंगित करता है)।
मैं नामित शाखा के अपने प्रति पर काम किया गया है 'ए' मैं इस बजाय होगा:
M1 ---- M2 ---- M3
\ \
\ \
A1 - A2 - A3 A1' - A2'
(अपने स्थानीय लेबल ए 3 के बजाय ए 2 की ओर इशारा करते के साथ; या A4 या A5 , आदि, इस पर निर्भर करता है कि मैंने कितने बदलाव किए हैं।) अब मुझे बस ए 2 पर अपने ए 3 (और यदि आवश्यक हो, आदि) को दोबारा करना है। एक स्पष्ट सीधा रास्ता:
$ git branch -a
master
* A
remotes/origin/master
remotes/origin/A
$ git branch new_A remotes/origin/A
$ git rebase -i new_A
और फिर छोड़ revs A1 और A2 पूरी तरह से, के बाद से संशोधित लोगों A1 के रूप में new_A 'और A2' में हैं। या:
$ git checkout -b new_A remotes/origin/A
$ git format-patch -k --stdout A3..A | git am -3 -k
(git am -3 -k
विधि git-format-patch
मैनुअल पेज में वर्णित है)।
ये पता लगाना है कि मैं क्या है कि श्री गोरा से पहले वह अपने rebase
, यानी, A1, A2, A3, आदि
की पहचान दूसरा दृष्टिकोण सफल रहा अंत है, तो किया नहीं किया है की आवश्यकता होती है:
M1 ---- M2 ---- M3
\ \
\ \
A1 - A2 - A3 A1' - A2' - A3'
जहाँ मेरे शाखा का नाम ए 3 के लिए new_A
अंक '(अपने मौजूदा A
शाखा अभी भी पुराने ए 3 के लिए अंक)। यदि मैं पहले दृष्टिकोण का उपयोग करता हूं और यह सफल होता है, तो मैं एक ही चीज़ के साथ समाप्त होता हूं, यह सिर्फ मेरी मौजूदा शाखा का नाम A
अब ए 3 को इंगित करेगा (और मेरे पास ए 1-ए 2-ए 3 के साथ पुरानी शाखा का कोई नाम नहीं है, यहां तक कि हालांकि यह अभी भी मेरे रेपो में है; इसे खोजने के लिए इसे रीफ्लॉग या इसी तरह से जाना आवश्यक है)।
बेशक
(मेरी A3 जरूरतों ए 3 ', दोनों इंटरैक्टिव रिबेस और "Git बजे" विधि निश्चित रूप से मेरे द्वारा काम करते हैं, की आवश्यकता होगी बनने के लिए। संशोधन हैं) यह भी संभव करने के लिए सिर्फ git merge
(के रूप में गैरी Fixler द्वारा जवाब में), लेकिन यह किसी मर्ज के लिए प्रतिबद्ध ("एम" कोई संख्या के साथ, नीचे) और revs A1 रखने और A2 दिखाई पैदा करेगा, दे रही है:
M1 ---- M2 ---- M3
\ \
\ \
A1 - A2 - A3 A1' - A2' -- M
\_______________/
आप मूल A1 संरक्षित करने के लिए चाहते हैं और ए 2, यह एक अच्छी बात है; अगर आप उनसे छुटकारा पाना चाहते हैं, तो यह एक बुरी चीज है। तो "क्या करना है" इस पर निर्भर करता है कि "आप परिणाम क्या चाहते हैं"।
जोड़ने के लिए संपादित करें: मुझे प्रारूप-पैच विधि बेहतर पसंद है क्योंकि यह मेरे पुराने ए शाखा नाम को छोड़ देता है जबकि मैं सुनिश्चित करता हूं कि सब कुछ अच्छा है।
$ git branch -m A old_A
$ git branch -m new_A A
और फिर, अगर old_A पूरी तरह से छोड़ दिया जा सकता है:: यह मान लिया जाये कि सब काम करता है और अच्छा है, यहाँ पिछले कुछ कदम है
$ git branch -D old_A
या, समतुल्य रूप, शुरू शाखा के साथ हटाने के लिए, तो ए के new_A नाम बदलने
(संपादित करें: यह भी देख git rebase --onto
प्रलेखन, ए 3, आदि, रिबेसिंग new_A शाखा पर के लक्ष्य के लिए।)
नोट: '--' और 'hard' के बीच कोई सफेद जगह नहीं है - मुझे थोड़ी देर लग गई, क्योंकि उत्तर दो स्क्रीन के बीच मेरी स्क्रीन पर लपेटा गया था :) – qbolec