Github: कांटे में अपस्ट्रीम शाखा आयात करें


169

मेरे पास originएक परियोजना से एक कांटा ( ) हैupstream । अब अपस्ट्रीम प्रोजेक्ट ने एक नई शाखा जोड़ दी है, मैं अपने कांटे में आयात करना चाहता हूं। मैं उसको कैसे करू?

मैंने रिमोट की जाँच करने और उसके शीर्ष पर एक शाखा बनाने की कोशिश की, लेकिन यह उस शाखा को कॉन्फ़िगर करता है जिस तरह git pushसे धक्का देने की कोशिश कर रहा है upstream:

git checkout upstream/branch
git checkout -b branch

संपादित करें

शायद यह स्पष्ट नहीं था, लेकिन मैं अपनी स्थानीय रिपॉजिटरी में शाखा जोड़ना चाहता हूं, इसलिए मैं इसे origin(मेरे कांटे) के माध्यम से धक्का दे सकता हूं git push। क्योंकि अपस्ट्रीम रिपॉजिटरी आमतौर पर केवल-पढ़ने के लिए होती है और आप इसमें योगदान करने के लिए कांटा करते हैं।

इसलिए मैं मूल रूप से एक गैर-मौजूद शाखा की जांच करना चाहता हूं, originजिसकी सामग्री अंदर से खींची जाएगी upstream

जवाबों:


262
  1. सुनिश्चित करें कि आपने अपने स्थानीय रेपो में नई अपस्ट्रीम शाखा खींची है :

    • सबसे पहले, सुनिश्चित करें कि आपका काम करने वाला पेड़ साफ है (किसी भी बदलाव के लिए प्रतिबद्ध / रोकें / वापस लाएं)
    • फिर, git fetch upstreamनई अपस्ट्रीम शाखा को पुनः प्राप्त करने के लिए
  2. नई अपस्ट्रीम शाखा के स्थानीय संस्करण में बनाएँ और स्विच करें ( newbranch):

    • git checkout -b newbranch upstream/newbranch
  3. जब आप उत्पत्ति के लिए नई शाखा को आगे बढ़ाने के लिए तैयार हों :

    • git push -u origin newbranch

-U करने के लिए निर्दिष्ट दूरस्थ ट्रैकिंग स्विच सेट (इस उदाहरण में, origin)


6
मेरा मानना git fetch upstreamहै कि पहले कदम पर एक बेहतर विकल्प है, क्योंकि git pull upstreamइसके बाद के लिए अधिक कार्रवाई करने की आवश्यकता git remote add ...है upstream
अलेक्जेंडर पावलोव

गिट पुल अपस्ट्रीम रिटर्न: You asked to pull from the remote 'upstream', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.कमांड के अंत में शाखा का नाम जोड़ने से नई स्थानीय शाखा के निर्माण की अनुमति देने के बजाय वर्तमान स्थानीय शाखा के साथ अपस्ट्रीम में शाखा के बीच मर्ज हो जाता है। कोई विचार?
mMontu

1
की जगह git pull upstream के साथ git fetch upstreamसमस्या को हल, और निम्न चरणों में काम किया।
mMontu

मुझे मिलता है: घातक: एक ही समय में पथ को अपडेट नहीं कर सकता और शाखा 'अपस्ट्रीम' पर स्विच कर सकता हूं। क्या आपने 'अपस्ट्रीम / मास्टर' चेकआउट करने का इरादा किया था जिसे कमिट नहीं किया जा सकता?
सुरेशव

1
@sureshvv शायद ऐसा इसलिए है क्योंकि आपको किसी भी काम को करने से पहले अपस्ट्रीम नाम की अपस्ट्रीम रिपॉजिटरी का रिमोट रेफरेंस करना होगा । यदि आप ऐसा नहीं करते हैं, तो यह है कि आप एक जोड़ते हैं: git Remote अपने अपस्ट्रीम your_git_upstream_repository_url.it को जोड़ते हैं । यदि आपको उस मामले पर स्पष्टीकरण की आवश्यकता है तो इसे पढ़ें
गेब्रियल रैना

7

मै इस्तेमाल करूंगा

git checkout -b <new_branch> upstream/<new_branch>

यह वही है जो मैंने प्रश्न में समझाया है उससे पहले भी मैंने कोशिश की थी; यह एक ही परिणाम की ओर जाता है।
प्रहार

4

मुझे इससे भी परेशानी थी, और google मुझे यहाँ ले गया। समाधान हालांकि काम नहीं किया। मेरी समस्या यह थी कि जब मैंने अपने अपस्ट्रीम को जोड़ा, तो उसने सभी शाखाओं के बजाय, केवल मेरे मास्टर को लाने के लिए अपना git config सेट किया। उदा। यह इस तरह दिखता था

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/master:refs/remotes/upstream/master

संपादन .it / config के रूप में मेरी समस्या तय की

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*

1

निम्नलिखित चरणों ने मेरे लिए अच्छा काम किया (ऊपर की ओर शाखा का नाम मानकर branch):

$ git fetch upstream
$ git checkout branch
$ git push origin

1
मुझे गेट अपस्ट्रीम घातक मिलता है: 'अपस्ट्रीम' एक गिट रिपॉजिटरी घातक प्रतीत नहीं होता है: रिमोट रिपॉजिटरी से नहीं पढ़ सकता है। कृपया सुनिश्चित करें कि आपके पास सही एक्सेस अधिकार हैं और रिपॉजिटरी मौजूद है।
थिंकडिजिटल

0

--track?

git branch --track branch upstream/branch

हो सकता है कि मैंने आपको गलत समझा हो, लेकिन ऐसा करना शाखा को उसी तरह स्थापित करेगा; pushप्यूज़िंग के साथ upstream
प्रहार करें

नहीं, मुझे लगता है कि मैंने आपको गलत समझा।
ट्रिबेल्सन

0

मेरे पास कुछ अधिक जटिल परिदृश्य था, जहां मेरे पास पहले से ही upstreamमेरे कांटे में एक परिभाषित था (विहित रेपो से) लेकिन एक अलग कांटे से एक शाखा की जांच करने की आवश्यकता थी। ऐसा करने के लिए, प्रक्रिया थोड़ी अलग है। यहाँ विन्यास मैं के साथ समाप्त हो गया है:

[remote "origin"]
url = git@github.com:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = git@github.com:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = git@github.com:<other_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/<other_user>/*

अब आप <other_user>कांटा से भी एक शाखा की जांच कर सकते हैं ।

git fetch <other_user> <branch>
git checkout -b <branch> <other_user>/<branch>

यह आपको एक स्थानीय शाखा देगा जो कांटा से प्राप्त होता है।

उस स्थानीय शाखा को आगे बढ़ाने के लिए मुझे अपने पुश कमांड के साथ विशिष्ट होना चाहिए।

git push origin <branch>

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