विषय समाधान
पोस्ट किए गए प्रश्न का उत्तर देने के लिए सही आदेश निम्नलिखित में से कोई भी हो सकता है (मान लें कि शाखा 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
और
प्रतिबद्ध लागू करेंगेZ
C
X
git checkout B
दौड़ने से पहले करने की कोशिश की हैgit rebase
?