git - जिथब पर प्रोजेक्ट में योगदान, कैसे "मास्टर के शीर्ष पर मेरे पुल अनुरोध को रीबेज करें"




github (2)

ठीक है तो मैं github पर एक परियोजना में योगदान। जिथब पर प्रोजेक्ट upstream , जिथब पर मेरा फोर्कड रेपो origin , और मेरे कंप्यूटर पर मेरा local रेपो है।

git checkout -b feature
# Working on feature
git commit -a -m 'only commit on feature'

तो मैं एक पुल अनुरोध जमा करते हैं

git push origin master

पुल अनुरोध की समीक्षा की जाती है और एक असंबंधित परिवर्तन की आवश्यकता होती है। कोई और प्रतिबद्ध बनाता है और upstream/master में विलय करता है

अब मुझे upstream रखरखावकर्ता ने "मास्टर के शीर्ष पर अपने पुल अनुरोध को दोबारा" करने के लिए कहा है

यह मेरी कहानी है (कानून और व्यवस्था ध्वनि प्रभाव डालें) .....

मैंने पुल अनुरोध में कोई बदलाव नहीं किया और यह अभी भी शाखा सुविधा पर एक ही प्रतिबद्धता है।

git checkout master
git fetch upstream
git checkout feature
git rebase master
=> "Current branch feature is up to date."
git push origin feature
=> "Everything up-to-date"

मुझे समझ में नहीं आता यह कैसे संभव है जब मुझे पता चले कि कोई व्यक्ति origin/feature लिए मेरे पुल अनुरोध को धक्का देने के बाद upstream/master को प्रतिबद्ध और विलय कर रहा है?

क्या कोई मुझे बता सकता है कि इस स्थिति में सही प्रक्रिया क्या होनी चाहिए?


अब मुझे अपस्ट्रीम रखरखावकर्ता ने "मास्टर के शीर्ष पर अपने पुल अनुरोध को दोबारा" करने के लिए कहा है

ध्यान दें कि सितंबर 2016 से, रखरखाव खुद को रिबेस को ट्रिगर कर सकता है।

देखें " पुल अनुरोधों को रीबेस करें और मर्ज करें "

जब आप नया "रीबेस और विलय" विकल्प चुनते हैं, तो पुल अनुरोध शाखा से काम करता है बेस शाखा की नोक पर छूट दी जाती है, और उसके बाद बेस शाखा को इस नए रिबस्ड हेड को तुरंत भेज दिया जाता है। लेखांकन जानकारी को बरकरार रखने के दौरान, रीबेस स्वचालित रूप से पुनर्निर्मित प्रतिबद्धताओं के कम्यूटर को वर्तमान उपयोगकर्ता को सेट करते हैं। पुल अनुरोध की शाखा इस ऑपरेशन द्वारा संशोधित नहीं की जाएगी।

यदि विवादों के कारण कोई रिबेस नहीं किया जा सकता है, तो हम आपको बताएंगे ताकि आप उन्हें आवश्यकतानुसार मैन्युअल रूप से हल कर सकें।


आप केवल अपस्ट्रीम रेपो पर एक लाच दिखाते हैं। यह वास्तव में आपकी किसी भी स्थानीय शाखा को अपडेट नहीं करता है। यह केवल upstream आपके ज्ञान को अद्यतन करता है । आपको यह सुनिश्चित करना होगा कि upstream/master पूरी तरह से आपके master में विलय हो गया है, जैसे कि git pull , master पर रीबेज करने से पहले, या बस बस upstream/master पर रीबेस करें।

अर्थात:

git checkout master
git pull upstream master
git checkout feature
git rebase master

या

git checkout feature
git rebase upstream/master

अद्यतन करें:

अपनी स्थानीय feature शाखा को ठीक करने के बाद, आपको पुल अनुरोध को अपडेट करने के लिए इसे origin पर वापस धक्का देना होगा। चूंकि आपने पहले से ही feature धक्का दिया है, इसलिए आप फिर से push नहीं दे सकते क्योंकि एक विद्रोह इतिहास बदलता है, और यह कोई तेज़-आगे नहीं है। आम तौर पर, जब एक पुश "गैर-फास्ट-फॉरवर्ड" के साथ विफल हो जाता है, तो आप इसे खींचकर हल करेंगे, लेकिन एक पुल सिर्फ दो अलग-अलग इतिहास को जोड़ देगा, जो निश्चित रूप से आप नहीं चाहते हैं। इसका मतलब यह होगा कि आपकी पुरानी (प्री रीबेस) feature शाखा को नए (पोस्ट रिबेस) के साथ जोड़ा जाएगा। आप नई feature शाखा की स्थिति के साथ origin/feature को ओवरराइट करना चाहते हैं, पुराने के किसी भी रिकॉर्ड को डंप करना चाहते हैं। इसका मतलब है कि आप पुश को होने के लिए मजबूर करना चाहते हैं, भले ही यह git push -f origin feature का उपयोग करके फास्ट-फॉरवर्ड न हो। नोट: बल धक्का खतरनाक है , और आप इसके साथ काम कर सकते हैं। केवल तभी इसका उपयोग करें यदि आप पूरी तरह से सुनिश्चित हैं कि आप जानते हैं कि आप क्या कर रहे हैं, ठीक है, जहां आप जानबूझकर पुरानी छोड़ना चाहते हैं, प्री-रीबेस feature शाखा में बेकार काम करता है।





github