GitHub रिपॉजिटरी में मूल GitHub रिपॉजिटरी से नए अपडेट खींचें


615

मैंने GitHub पर किसी की रिपॉजिटरी को फोर्क किया और अपने वर्जन को कमेटी और मूल रिपॉजिटरी में किए गए अपडेट से अपडेट करना चाहूंगा। जब मैंने अपनी कॉपी वापस ली तो ये बनाए गए थे।

मैं उन परिवर्तनों को कैसे खींच सकता हूं जो मूल में किए गए थे और उन्हें अपने भंडार में शामिल किया था?


1
संभव डुप्लिकेट, या शायद सिर्फ संबंधित: GitHub में कांटे के बीच विलय

यदि अतिरिक्त टैग हैं तो आप git push --force origin --tagsप्रस्तावित समाधानों के बाद सिंक करना चाहते हैं!
मीडियाविंस

जवाबों:


716

आपको मूल रिपॉजिटरी (जिसे आपने कांटा था) को रिमोट के रूप में जोड़ना होगा।

से GitHub कांटा आदमी पेज :

कांटा

एक बार जब क्लोन पूरा हो जाता है तो आपके रेपो में " origin" नामक एक रिमोट होगा जो कि GitHub पर आपके कांटे की ओर इशारा करता है।
नाम को आप भ्रमित न करें, यह उस मूल रेपो की ओर इशारा नहीं करता है जिसे आपने से लिया था। उस रेपो पर नज़र रखने में आपकी मदद करने के लिए हम "अपस्ट्रीम" नाम का एक और रिमोट जोड़ेंगे:

$ cd github-services
$ git remote add upstream git://github.com/pjhyett/github-services.git
$ git fetch upstream

# then: (like "git pull" which is fetch + merge)
$ git merge upstream/master master

# or, better, replay your local work on top of the fetched branch
# like a "git pull --rebase"
$ git rebase upstream/master

आपके पास एक माणिक रत्न भी है जो उन गिटहब संचालन को सुविधाजनक बना सकता है

दो नोकवाला

" Git कांटा git क्लोन है? " भी देखें ।


14
यह भी देखें bassistance.de/2010/06/25/git-fu-updating-your-github-fork एक अच्छा सारांश के लिए।
VonC

2
@syedrakib मुझे पसंद है git rebase upstream/master, लेकिन मैंने उत्तर में दो संभावनाएं जोड़ी हैं।
वॉनक

1
@PaBLoX यदि आपने एक रेपो को फोर्क किया है, तो आप अपनी रेपो पर, अपनी शाखा में काम कर रहे हैं : रिबेस और एक पुश को बल दें: कोई गड़बड़ शामिल नहीं है। यहां तक ​​कि प्रगति में एक पुल अनुरोध सही ढंग से अद्यतन किया जाएगा।
वॉनक

2
@PaBLoX आप एक गड़बड़ नहीं बनाते हैं: आप git push --force, अपने स्थानीय शाखा द्वारा GitHub पर अपनी शाखा के इतिहास को बदलने से आप बस विद्रोह कर देते हैं। चूंकि केवल आप दुखद शाखा का उपयोग कर रहे हैं, कोई गड़बड़ शामिल नहीं है।
वॉनक

2
मै समझता हुँ। मुझे अब भी लगता है कि यह कठिन, सहज और गैर सहज है। फिर भी यह अजीब है कि मेरे परिवर्तन हमेशा शीर्ष (अंतिम) पर होंगे, जबकि वास्तव में वे पहले किए गए थे। इससे पहले कि मैंने जो समाधान पोस्ट किया है वह बेहतर दिखता है (अभी भी nontrivial)। समस्या यह है कि प्रतिबद्ध हैश परिवर्तन (जाहिर है, क्योंकि वहाँ एक नया माता-पिता है) और गितुब के अंदर बहुत शोर उत्पन्न करता है जब मुद्दों को बुलाया जा रहा है। फिर भी यह मुझे आश्चर्यचकित करता है कि अपस्ट्रीम मर्ज कमिट्स या इतिहास के बारे में "झूठ" बनाए बिना अपस्ट्रीम के साथ अपडेट रहने और अपने खुद के कांटे को प्रबंधित करने का कोई तरीका नहीं है।
पाब्लो ओल्मोस डी एगुइलेरा सी।

99

VonC के उत्तर के अलावा, आप इसे अपनी पसंद के अनुसार आगे भी ट्वीक कर सकते हैं।

दूरस्थ शाखा से लाने के बाद, आपको कमिट्स को मर्ज करना होगा। मैं प्रतिस्थापित करूंगा

$ git fetch upstream

साथ में

$ git pull upstream master

चूंकि git पुल अनिवार्य रूप से git fetch + git मर्ज है।


क्या होगा अगर मुझे पता है कि अपस्ट्रीम शाखा में मौजूदा फ़ाइलों में कोई बदलाव नहीं है, लेकिन केवल कुछ संसाधन फ़ाइलें जोड़ी गई हैं - क्या मुझे अभी भी मर्ज करने की आवश्यकता है?
azec-pdx

4
निश्चित रूप से यह सिर्फ उस मामले में तेजी से आगे
बढ़ेगा

कैसे एक अपस्ट्रीम मास्टर सभी स्थानीय फाइलों को ओवरराइट कर देता है (इसलिए कोई मर्ज टकराव नहीं करता है) अपस्ट्रीम मास्टर इस मामले में कोड में अग्रणी है, इसलिए हम इसे 100% पर भरोसा करते हैं ... ऐसा करने में कामयाब रहे हैं
snh_nl

1
@snh_nl git rebase upstream masterध्यान दें कि यह संघर्ष-मुक्त नहीं है यदि आपने पर्याप्त रूप से विचलन किया है upstream/master। देखें git-scm.com/docs/git-rebase (tl; dr: यह हार्ड आपके स्थानीय मास्टर को अपस्ट्रीम में बदल देता है, और फिर आगे से स्थानीय सभी प्रकार के डायवर्जन के बिंदु से फिर से जुड़ने की कोशिश करता है)
काउबेर

68

इस वीडियो में दिखाया गया है कि कैसे GitHub से सीधे एक कांटा अपडेट किया जाता है

कदम:

  1. GitHub पर अपना कांटा खोलें।
  2. पर क्लिक करें Pull Requests
  3. पर क्लिक करें New Pull Request। डिफ़ॉल्ट रूप से, GitHub आपके कांटे के साथ मूल की तुलना करेगा, और यदि आपने कोई परिवर्तन नहीं किया है तो तुलना करने के लिए कुछ भी नहीं होना चाहिए।
  4. पर क्लिक करें switching the base। अब GitHub आपके कांटे की तुलना मूल से करेगा, और आपको सभी नवीनतम परिवर्तन देखने चाहिए।
  5. Create a pull requestइस तुलना के लिए क्लिक करें और अपने पुल अनुरोध (जैसे, मूल से अपडेट) के लिए एक अनुमानित नाम निर्दिष्ट करें।
  6. पर क्लिक करें Create pull request
  7. नीचे स्क्रॉल करें और क्लिक करें Merge pull requestऔर अंत में Confirmमर्ज करें। यदि आपके कांटे में कोई बदलाव नहीं हुआ है, तो आप इसे अपने आप मर्ज कर पाएंगे।

3
दुर्भाग्य से, यह अच्छा चित्रमय तरीका आपके फोर्क में जोड़ा गया शोर पैदा करता है जैसा कि स्वीकृत उत्तर के लिए टिप्पणियों में ऊपर बताया गया है। इसलिए कमांड-लाइन विधि की सिफारिश की जाती है: help.github.com/articles/syncing-a-fork
जोनाथन क्रॉस

मैं नहीं पा सके switching the baseविकल्प
alper

64

उपयोग:

git remote add upstream ORIGINAL_REPOSITORY_URL

यह आपके अपस्ट्रीम को उस रिपॉजिटरी में सेट कर देगा जिसे आपने फोर्क किया था। फिर ऐसा करें:

git fetch upstream      

यह मूल रिपॉजिटरी से मास्टर सहित सभी शाखाओं को लाएगा।

अपनी स्थानीय मास्टर शाखा में इस डेटा को मिलाएं:

git merge upstream/master

अपने forked रिपॉजिटरी में होने वाले परिवर्तनों को मूल में धकेलें:

git push origin master

देखा! आपको मूल रिपॉजिटरी को सिंक करने के साथ किया जाता है।


कैसे कोई अपस्ट्रीम मास्टर सभी स्थानीय फाइलों को ओवरराइट कर देता है (इसलिए कोई मर्ज नहीं होता है) अपस्ट्रीम मास्टर इस मामले में कोड में अग्रणी है, इसलिए हम इसे 100% पर भरोसा करते हैं ... ऐसा करने में कामयाब रहे हैं
snh_nl

एक तरीका बस स्थानीय कॉपी को हटाना है, और एक ताज़ा क्लोनिंग करना है :)
ARK

1

यदि आप GitHub डेस्कटॉप एप्लिकेशन का उपयोग कर रहे हैं, तो शीर्ष दाएं कोने पर एक सिंक्रनाइज़ बटन है। इसके बाद Update from <original repo>ऊपर बाईं ओर स्थित पर क्लिक करें ।

यदि सिंक्रनाइज़ किए जाने वाले कोई परिवर्तन नहीं हैं, तो यह निष्क्रिय हो जाएगा।

इसे आसान बनाने के लिए यहां कुछ स्क्रीनशॉट दिए गए हैं ।


1

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


1

यदि आप इसे बिना cli के करना चाहते हैं, तो आप इसे पूरी तरह से Github वेबसाइट पर कर सकते हैं।

  1. अपने कांटे के भंडार पर जाएं।
  2. पर क्लिक करें New pull request
  3. अपने कांटा को बेस रिपॉजिटरी के रूप में और मूल (अपस्ट्रीम) रिपॉजिटरी को हेड रिपॉजिटरी के रूप में सेट करना सुनिश्चित करें। आमतौर पर आप केवल मास्टर शाखा को सिंक करना चाहते हैं।
  4. Create new pull request
  5. मर्जिंग बटन के दाईं ओर तीर का चयन करें, और मर्ज के बजाय रिबेस को चुनना सुनिश्चित करें। फिर बटन पर क्लिक करें। इस तरह, यह अनावश्यक मर्ज कमिट का उत्पादन नहीं करेगा।
  6. किया हुआ।

0

पेरेंट रिपॉजिटरी के साथ अपने कांटेक्ट रिपॉजिटरी को अपने आप सिंक करने के लिए, आप GitHub पर Pull ऐप का उपयोग कर सकते हैं ।

का संदर्भ लें रीडमी अधिक जानकारी के लिए।

उन्नत सेटअप के लिए जहां आप कांटे के भंडार में किए गए अपने परिवर्तनों को संरक्षित करना चाहते हैं, यहां एक समान प्रश्न पर मेरे उत्तर का संदर्भ लें ।

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