GitHub में कांटे के बीच विलय


259

मैंने GitHub रिपॉजिटरी को फोर्क किया। फिर मैंने अपने कांटे में कुछ बदलाव किए। तब मूल भंडार ने मेरे परिवर्तन और कुछ अन्य लोगों को मिला दिया। अब, मैं उन परिवर्तनों को मर्ज करना चाहता हूं जो मुझे याद आ रहे हैं। मैंने पुश के बाद एक साधारण पुल की कोशिश की, लेकिन यह मेरी नकल में काम करता है। इसे करने का सबसे अच्छा तरीका क्या है?

जवाबों:


352

आपके पास प्रत्येक रिपॉजिटरी के लिए संभवतः "रिमोट" है। आपको एक रिमोट से खींचने और दूसरे को पुश करने की आवश्यकता है।

यदि आप मूल रूप से अपने कांटे से क्लोन करते हैं, तो उस रिमोट को "मूल" कहा जाएगा। यदि आपने इसे पहले से नहीं जोड़ा है, तो आपको पहले व्यक्ति के भंडार को दूसरे रिमोट के रूप में जोड़ना होगा:

git remote add firstrepo git://github.com/first/repo.git

उसके बाद सभी सेट अप, आप वास्तव में सक्षम होना चाहिए

git pull firstrepo master
git push origin

याद रखें, git pullएक मैक्रो से ज्यादा कुछ नहीं है जो उस क्रम में करता है git fetchऔर git merge। आपको बस पहले व्यक्ति के भंडार से आने की सूची प्राप्त करने की आवश्यकता है और फिर उनकी शाखा को अपने पेड़ में मिला देना है। विलय करना दोनों शाखाओं पर अपने कामों के साथ सही काम करना चाहिए।

GitHub, अपने सभी सतत अजीबता में, आपको निश्चित रूप से एक शॉर्टकट देता है। रिपॉजिटरी के आपके फोर्क पर एक "फास्ट-फॉरवर्ड" बटन है जिसे आप अपने फोर्क को पकड़ने के लिए उपयोग कर सकते हैं यदि आप पूरी तरह से दूसरी तरफ मर्ज हो चुके हैं।


1
क्या पूरी तरह से रिमोट संचालन के साथ ऐसा करने का कोई तरीका है? अगर मैं सही तरीके से समझूं, तो इस विधि के साथ आप सभी परिवर्तनों को स्थानीय रिपॉजिटरी में डाउनलोड कर लेंगे और फिर उन्हें जीथब पर कांटे पर वापस अपलोड कर देंगे। मैं सिर्फ किसी भी तरह सीधे जीथब पर कांटा में सभी परिवर्तनों को खींचूंगा।
केन लियू

1
नहीं। Git उसका समर्थन नहीं करता है। सौभाग्य से, जीथब के पास अब वेब इंटरफेस में एक मर्ज बटन है, हालांकि।
cweiske

13
@cweiske - यह मर्ज बटन कहां है? मैंने सभी व्यवस्थापक पृष्ठों और मुख्य पृष्ठों के माध्यम से देखा है, लेकिन इसे पा नहीं सकते हैं :(।
एडम

2
@ अदम, यह पुल अनुरोध पृष्ठ पर है। इसलिए फोरकर अपनी एक शाखा को आप में से किसी एक में मिलाने के लिए एक पुल रिक्वेस्ट खोलेगा। वहां आप मर्ज बटन पर क्लिक कर सकते हैं।
रॉब बर्रेका

2
बटन फ़ास्ट-फ़ॉर्वर्ड किसी भी अधिक उपलब्ध नहीं लगता है। जानकारी के लिए, मैंने अपने कमांड के भीतर एक और git URL का उपयोग किया है :git remote add snaury git@github.com:snaury/script-runner
olibre

72

तो ऊपर दिए गए स्वीकृत उत्तर ने मेरे लिए पूरी तरह से काम नहीं किया। जब यह काम करता है, तो मूल रूप से यह मूल गथुब लेखक के लिए लिंक खो देता है, और उसके बाद अब काम नहीं करता था। मुझे लगता है कि समस्या यह थी कि उत्तर दूरस्थ नाम और शाखा के बीच / बाहर छोड़ दिया गया था। तो यह रिमोट से मास्टर नामक एक शाखा लाएगा, लेकिन फिर इसके साथ कुछ भी करने में सक्षम नहीं होगा। सच में यकीन नहीं क्यों।

यहाँ जिस तरह से github उनकी साइट से अनुशंसा करता है

एक बार जब आप अपने फोर्क्ड रेपो का क्लोन बना लेते हैं, तो आपको मूल उत्तर की तरह रिमोट पॉइंटिंग जोड़ने की आवश्यकता होती है, जैसा कि पिछले उत्तर में कहा गया है। वे इसे अपस्ट्रीम कहना पसंद करते हैं, लेकिन इससे कोई फर्क नहीं पड़ता।

git remote add upstream git://github.com/octocat/Spoon-Knife.git

फिर आप लाए

git fetch upstream

और आप विलय के लिए उपलब्ध संस्करण देखेंगे

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

फिर आपको बस उस शाखा को चुनने की ज़रूरत है जिसे आप मर्ज करना चाहते हैं। ध्यान दें कि ये स्थानीय शाखाएं नहीं हैं, इन्हें रीमोट के तहत संग्रहीत किया जाता है। लेकिन बशर्ते आपके पास अपस्ट्रीम / मास्टर (जिसे अनुमति दी गई है) नामक एक स्थानीय शाखा नहीं है, आपको नीचे दी गई रेखा के साथ ठीक विलय करना चाहिए:

git merge upstream/master

वैकल्पिक रूप से आप इस लाइन के साथ भ्रूण / मर्ज (प्रारंभिक भ्रूण के कम से कम) के बाद शॉर्टकट कर सकते हैं:

git pull upstream/master

समस्या यह है कि यदि आपके पास पहले से ही परिवर्तन हैं, तो आपके द्वारा शामिल किए गए परिवर्तन एक मर्ज कमिट बनाएंगे। कुछ मामलों में उपयोगी है, लेकिन ज्यादातर बार थोड़ा व्यर्थ।
पाब्लो ओल्मोस डी एगुइलेरा सी।

1
उन मामलों में उपयोग git rebaseयह बेहतर काम करेगा, और उन बदसूरत खाली मर्ज को छोड़ देता है
फ्रुच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.