कभी-कभी हमारे पास एक अपस्ट्रीम है जो उस शाखा को पुनर्जीवित/पुनर्स्थापित करता है जिस पर हम निर्भर हैं। यह एक बड़ी समस्या हो सकती है - अगर हम डाउनस्ट्रीम हैं तो हमारे लिए गन्दा संघर्ष पैदा कर सकते हैं।
जादू git pull --rebase
है एक सामान्य Git पुल, है शिथिल इस तरह कहा जाए तो कुछ (हम एक दूरस्थ बुलाया मूल और इन सभी उदाहरणों में एक शाखा foo नामक इस्तेमाल करेंगे):
# assume current checked out branch is "foo"
git fetch origin
git merge origin/foo
पहली नज़र में, आप सोच सकते हैं एक Git खींच कि --rebase सिर्फ इस करता है:
git fetch origin
git rebase origin/foo
लेकिन यदि नदी के ऊपर रिबेस किसी भी "squashin शामिल मदद नहीं करेगा जी "(जिसका अर्थ है कि काम के पैच-आईडी बदल गए, न केवल उनके आदेश)।
जिसका अर्थ है कि गिट पुल --रेबेस को उससे थोड़ा अधिक करना है। यह एक स्पष्टीकरण है कि यह क्या करता है और कैसे।
मान लें कि आपका शुरुआती बिंदु यह है दो:
a---b---c---d---e (origin/foo) (also your local "foo")
समय गुजरता है, और आप अपने खुद के "foo" के शीर्ष पर कुछ करता बना दिया है:
a---b---c---d---e---p---q---r (foo)
इस बीच, में आकर एंटी-सोशल क्रोध, अपस्ट्रीम रखरखाव ने न केवल अपने "फू" को पीछे छोड़ दिया है, उसने स्क्वैश या दो का भी इस्तेमाल किया है। उनकी प्रतिबद्धता श्रृंखला अब इस तरह दिखती है:
a---b+c---d+e---f (origin/foo)
इस बिंदु पर एक गिट खींचने के परिणामस्वरूप अराजकता हो जाएगी। यहां तक कि एक गिट लाता है; गिट रिबेस मूल/foo इसे काट नहीं देगा, क्योंकि एक तरफ "बी" और "सी" करता है, और दूसरे पर "बी + सी" प्रतिबद्ध करता है, संघर्ष करेगा। (और इसी तरह डी, ई, और डी + ई के साथ)।
क्या git pull --rebase
करता है, इस मामले में, यह है:
git fetch origin
git rebase --onto origin/foo e foo
यह आपको देता है:
संबंधित: [मुझे गिट पुल --rebase का उपयोग कब करना चाहिए?] (Http://stackoverflow.com/q/2472254/456814)। –
[गिट पुल वीएस गिट फ़ेच गिट रीबेज] का संभावित डुप्लिकेट [http://stackoverflow.com/questions/3357122/git-pull-vs-git-fetch-git-rebase) –
उपयोगी लिंक: https: // www। atlassian.com/git/tutorials/rewriting-history/git-rebase –