Github पर प्रोजेक्ट करने में योगदान, "मास्टर के शीर्ष पर मेरे पुल अनुरोध को कैसे वापस करें"


98

ठीक है, इसलिए मैं गितुब पर एक परियोजना में योगदान कर रहा हूं। गितुब पर परियोजना है 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"

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

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

जवाबों:


109

आप केवल अपस्ट्रीम रेपो पर एक भ्रूण दिखाते हैं। यह वास्तव में आपकी किसी भी स्थानीय शाखा को अपडेट नहीं करता है। यह केवल आपके ज्ञान को अद्यतन करता है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शाखा को नई (पोस्ट रिबेस) के साथ जोड़ा जाएगा। आप पुरानी शाखा के किसी भी रिकॉर्ड को डंप करते हुए, नई शाखा की स्थिति के साथ लिखना चाहते हैं । इसका मतलब है कि आप पुश को बल देने के लिए बाध्य करना चाहते हैं, भले ही यह एक फास्ट-फॉरवर्ड नहीं है, का उपयोग करके । ध्यान दें:origin/featurefeaturegit push -f origin featureखतरनाक है , और आप इसके साथ कमिट्स खो सकते हैं। केवल इसका उपयोग करें यदि आप निश्चित रूप से जानते हैं कि आप क्या कर रहे हैं, जैसे कि यहीं, जहाँ आप जानबूझकर पुराने को छोड़ना चाहते हैं, पूर्व-खंड featureशाखा में बेकार हो जाता है ।


1
ठीक है, मैं देख रहा हूँ, स्पष्टीकरण के लिए धन्यवाद। मैं देख रहा हूं कि मुझे भ्रूण के बजाय खींचा जाना चाहिए था। अब मुझे एक और समस्या है, जब मुझे git push origin featureएक गैर-फास्ट-फॉरवर्ड त्रुटि मिलती है, आदि को पुश करने में विफल रहा है। क्या जीआईटी - क्रेबेज़ इस त्रुटि को हल करेगा और मेरी सुविधा शाखा को धक्का देगा या यह अनुचर और अन्य लोगों के लिए समस्या पैदा करेगा?
फोंटनो

1
पुश को कवर करने के लिए मेरा उत्तर अपडेट किया गया।
रयान स्टीवर्ट

मेरे मामले में, मैंने एक रिमोट के रूप में अपस्ट्रीम रेपो को जोड़ा, लेकिन इससे प्राप्त करना भूल गया। git fetch upstreamनवीनतम परिवर्तनों को डाउनलोड किया, फिर अंततः git rebase upstream/developकाम किया।
अल्बर्टो चिशोले

9

अब मुझे अपस्ट्रीम मेंटेनर से "मास्टर के ऊपर मेरे खींचने के अनुरोध को फिर से करने" के लिए कहा गया है

ध्यान दें कि सितंबर 2016 के बाद से, अनुचर खुद / खुद ही रिबास ट्रिगर कर सकता है।

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

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

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

https://cloud.githubusercontent.com/assets/2195/18671961/a03fa9b6-7f35-11e6-8fa0-e16b2fede8ca.gif

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.