2009-07-14 17 views
241

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

+0

अपस्ट्रीम रेपो से खींचने और अपने कांटे पर धक्का देने के लिए आप किस आदेश का उपयोग करते थे? आपके कामों का मतलब क्या है "डुप्लिकेट"? समस्या की प्रकृति स्पष्ट नहीं है, और अतिरिक्त विवरण की आवश्यकता है। –

उत्तर

326

आपके पास प्रत्येक संग्रह के लिए शायद "दूरस्थ" है। आपको एक रिमोट से खींचने और दूसरे को धक्का देने की जरूरत है।

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

git remote add firstguy git://github.com/firstguy/repo.git 

कि पूरी तरह तैयार हो जाने के बाद वास्तव में

git pull firstguy master 
git push origin 

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

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

+1

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

+1

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

+13

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

67

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

यहाँ जिस तरह से GitHub अपनी साइट से सिफारिश की गई है: http://help.github.com/fork-a-repo/

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

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 
+0

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

+1

उन मामलों में 'गिट रिबेस' का उपयोग करें, यह बहुत बेहतर काम करेगा, और उन बदसूरत खाली मर्ज कामों को छोड़ दें – Fruch