कभी-कभी हमारे पास एक अपस्ट्रीम होता है, जो एक शाखा है जिसे हम निर्भर करते हैं। यह एक बड़ी समस्या हो सकती है - अगर हम नीचे की ओर हैं तो हमारे लिए गन्दा संघर्ष हो सकता है।
जादू है git pull --rebase
एक सामान्य गिट पुल है, शिथिल रूप से बोलना, कुछ इस तरह (हम मूल नामक रिमोट का उपयोग करेंगे और इन सभी उदाहरणों में एक शाखा जिसे फू कहा जाता है):
# assume current checked out branch is "foo"
git fetch origin
git merge origin/foo
पहली नज़र में, आप सोच सकते हैं कि एक खींच --rebase सिर्फ यह करता है:
git fetch origin
git rebase origin/foo
लेकिन इससे मदद नहीं मिलेगी, अगर अपस्ट्रीम रिबेज में कोई "स्क्वैशिंग" शामिल है (जिसका अर्थ है कि कमिट के पैच-आईडी बदल गए हैं, न कि केवल उनके आदेश)।
जिसका मतलब है कि git pull --rebase को इससे थोड़ा ज्यादा करना है। यहां यह बताया गया है कि यह क्या और कैसे करता है।
मान लीजिए कि आपका प्रारंभिक बिंदु यह है:
a---b---c---d---e (origin/foo) (also your local "foo")
समय बीतता है, और आपने अपने स्वयं के "फू" के ऊपर कुछ कमिट किए हैं:
a---b---c---d---e---p---q---r (foo)
इस बीच, असामाजिक गुस्से के एक फिट में, अपस्ट्रीम अनुचर ने न केवल अपने "फू" को विद्रोह किया, उसने स्क्वैश या दो का भी इस्तेमाल किया। उनकी प्रतिबद्ध श्रृंखला अब इस तरह दिखती है:
a---b+c---d+e---f (origin/foo)
इस बिंदु पर एक खींच खींच अराजकता में परिणाम होगा। यहां तक कि एक गिट लाने; git rebase उत्पत्ति / foo इसे नहीं काटेंगे, क्योंकि एक तरफ "b" और "c" होता है, और दूसरे पर "b + c" प्रतिबद्ध होता है। (और इसी तरह डी, ई, और डी + ई के साथ)।
git pull --rebase
इस मामले में, क्या है:
git fetch origin
git rebase --onto origin/foo e foo
यह आपको देता है: