विषय समाधान
पोस्ट किए गए प्रश्न का उत्तर देने के लिए सही आदेश निम्नलिखित में से कोई भी हो सकता है (मान लें कि शाखा topicपहले से ही चेक आउट है):
git rebase --onto B master
git rebase --onto master~1 master
git rebase --onto B A
git rebase --onto B C
git rebase --onto B
यदि topicजाँच नहीं की जाती है, तो आप बस topicकमांड को जोड़ते हैं (अंतिम को छोड़कर) जैसे:
git rebase --onto B master topic
वैकल्पिक रूप से, पहले शाखा देखें:
git checkout topic
टारगेट कमिट करने के लिए कमिट्स के किसी भी स्ट्रिंग को रिबास करें
कमांड के मूल रूप की हमें आवश्यकता होती है, जिसे दस्तावेज़ीकरण से हटा दिया गया है:
git rebase --onto <Target> [<Upstream> [<Branch>]]
<Branch>वैकल्पिक है और यह सब करता है बाकी कमांड को निष्पादित करने से पहले निर्दिष्ट शाखा की जांच करता है। यदि आप पहले से ही उस शाखा को देख चुके हैं जिसे आप रिबेट करना चाहते हैं, तो आपको इसकी आवश्यकता नहीं है। ध्यान दें कि आपके पास निर्दिष्ट होना चाहिए<Upstream> करने के लिए<Branch> या गिट आपको लगता है कि आप निर्दिष्ट कर रहे हैं <Upstream>।
<Target>हम प्रतिबद्ध है कि हम के लिए हमारी स्ट्रिंग संलग्न करेंगे। शाखा नाम प्रदान करते समय, आप बस उस शाखा के प्रमुख वचन को निर्दिष्ट कर रहे हैं।<Target>किसी भी प्रतिबद्ध किया जा सकता है कि ले जाया जा रहा है की स्ट्रिंग में निहित नहीं होगा। उदाहरण के लिए:
A --- B --- C --- D master
\
\-- X --- Y --- Z feature
पूरे सुविधा शाखा को स्थानांतरित करने के लिए, आप चयन नहीं कर सकते X, Y, Z, याfeature के रूप में <Target>उन के बाद से सभी समूह के अंदर प्रतिबद्ध ले जाया जा रहा है।
<Upstream>खास है क्योंकि इसका मतलब दो अलग-अलग चीजों से हो सकता है। यदि यह एक प्रतिबद्ध है जो चेक आउट शाखा का पूर्वज है, तो यह कट बिंदु के रूप में कार्य करता है। मेरे द्वारा दिए गए उदाहरण में, यह कुछ भी होगा जो नहीं है C,D या master। <Upstream>चेक आउट ब्रांच के प्रमुख के आने के बाद सभी कमिट होते हैं जिन्हें स्थानांतरित कर दिया जाएगा।
हालांकि, यदि <Upstream>पूर्वज नहीं है, तो चेक को निर्दिष्ट प्रतिबद्ध से श्रृंखला का बैक अप लें जब तक कि चेक आउट शाखा के साथ एक सामान्य पूर्वज नहीं मिल जाता है (और यदि यह एक नहीं मिल सकता है तो गर्भपात करता है)। हमारे मामले में, एक में <Upstream>की B, C, D, या masterमें सभी परिणाम के लिए प्रतिबद्ध होगाB कटौती बिंदु के रूप में सेवारत। <Upstream>अपने आप में एक वैकल्पिक कमांड है और यदि यह निर्दिष्ट नहीं है, तो git चेक आउट ब्रांच के माता-पिता को देखता है जो प्रवेश के बराबर है master।
अब उस git ने कट्स का चयन किया है जो कटेगा और आगे बढ़ेगा, यह उन्हें लागू होता है <Target> , जो पहले से ही लक्ष्य पर लागू होते हैं।
दिलचस्प उदाहरण और परिणाम
इस शुरुआती बिंदु का उपयोग करना:
A --- B --- C --- D --- E master
\
\-- X --- Y --- Z feature
git rebase --onto D A feature
प्रतिबद्ध लागू होगी B, C, X, Y, Zप्रतिबद्ध करने के लिए Dऔर लंघन अंत Bऔर Cक्योंकि वे पहले से लागू किया गया है।
git rebase --onto C X feature
प्रभावी ढंग से कमिट करने के लिए , कमिट Yऔर
प्रतिबद्ध लागू करेंगेZCX
git checkout Bदौड़ने से पहले करने की कोशिश की हैgit rebase?