मैं मूल से एक कांटा कैसे रीसेट कर सकता हूं


33

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

धन्यवाद


मैं एक साधारण निर्देश लिखता हूं। : यहाँ पर बाहर की जाँच webapps.stackexchange.com/a/58140/63016
— Youngjae

2
अब एक आधिकारिक डॉक है जो अच्छी तरह से किया गया है: help.github.com/articles/syncing-a-fork
— आंद्रे

जवाबों:


36

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

आपको एक 3 रिपॉजिटरी (आपकी स्थानीय कॉपी प्रत्यय) की मदद चाहिए। 3 रिपोज हैं:

  • "अपस्ट्रीम": गितुब पर अपस्ट्रीम प्रोजेक्ट का भंडार।
  • "उत्पत्ति": जीथब पर आपका कांटा का भंडार
  • "स्थानीय": आपके कंप्यूटर पर आपका स्थानीय भंडार। मुझे लगता है कि आप इसे फोर्क का उपयोग करके क्लोन करके बनाएंगे git clone git@github.com:your-username/projectname.git, और यह कि हर कोई शाखा का उपयोग कर रहा है master।

वर्तमान में "उत्पत्ति" और "स्थानीय" एक ही स्थिति में हैं, और "अपस्ट्रीम" 1 या अधिक कमिट्स (मर्ज और बाद के किसी भी परिवर्तन) से आगे है।

पहले अपस्ट्रीम प्रोजेक्ट को Git रिमोट के रूप में जोड़ें :

git remote add upstream https://github.com/upstream-username/projectname.git

फिर अपने स्थानीय रिपॉजिटरी के करंट ( ) ब्रांच में रिमोट की ब्रांच से होने वाले बदलावों को (मतलब भ्रूण और फिर अपने आप मर्ज करें ) खींचें :mastermaster

git pull upstream master

अब आपका स्थानीय भंडार साथ में है upstream। अंत में, अपने स्थानीय रेपो को अपने गितुब कांटे पर धकेलें:

git push origin master

अब सब कुछ सिंक में है।


2
बहुत बहुत धन्यवाद .. यह एक शर्म की बात है कि यह संभव नहीं हो सकता है कि वेब इंटरफेस में बनाने के लिए ..
— bAN

1
यह वेब इंटरफ़ेस पर वास्तव में संभव है: webapps.stackexchange.com/a/31010/10390
— thSoft

Yeehaw! मैं इस स्पष्ट जानकारी को खोजने के लिए अपने बालों को फाड़ रहा था। साझा करने के लिए धन्यवाद!
— पेपोलुआन

... लेकिन कृपया उत्तर की टिप्पणियों पर भी एक नज़र डालें, यह साबित करते हुए कि वेब के माध्यम
— से Resync

आप क्या करते हैं जब यह कहता है कि "पहले से ही तारीख तक" खींच के बाद, लेकिन यह स्पष्ट रूप से नहीं है? (ऐसी फाइलें हैं जिन्हें मैंने एक उपनिर्देशिका में बदल दिया है, और मुझे किसी भी अन्य फ़ाइल में कोई अंतर नहीं होना चाहिए, लेकिन मैं करता हूं)
— रॉबर्टो टॉमेस

1

आपको एक रिमोट जोड़ने ( GitHub मदद देखें ) और उस नए रिमोट से खींचने की आवश्यकता है।

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master

0

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

संक्षिप्त उत्तर यह है कि अपस्ट्रीम रिपॉजिटरी की प्रत्येक शाखा के साथ अपने कांटे को अपडेट करने के लिए, इस कमांड को निष्पादित करें।

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

यह क्या नहीं करता है अपने कांटे से कोई भी शाखाएं हटा दें जो अपस्ट्रीम से हटा दी गई हैं। इसे स्वचालित करने का कोई तरीका नहीं है, खासकर यदि आपने अपने कांटे पर शाखाएं बनाई हैं।

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