एक शाखा ट्रैकिंग कर रही है रिमोट को कैसे बदलें?


672

centralभंडार, एक नया सर्वर पर स्थापित करने की तो मैं अपने स्थानीय रेपो पर एक नया रिमोट बनाया है, और है कि करने के लिए धक्का दिया था।

लेकिन अब जब मैं करता हूं git pull, तो यह दावा करता है कि मैं अप टू डेट हूं। यह गलत है - यह मुझे पुरानी दूरस्थ शाखा के बारे में बता रहा है , नया नहीं, जिसे मैं एक तथ्य के लिए जानता हूं, उसे लाने के लिए नए तरीके हैं।

एक अलग रिमोट को ट्रैक करने के लिए मैं अपनी स्थानीय शाखा को कैसे बदलूं?

मैं इसे git config फाइल में देख सकता हूं लेकिन मैं चीजों को गड़बड़ाना नहीं चाहता।

[branch "master"]
    remote = oldserver
    merge = refs/heads/master

1
मैंने आपका शीर्षक बदल दिया - आप वास्तव में अपने द्वारा ट्रैक किए जा रहे रिमोट को बदलने का प्रयास कर रहे हैं, लेकिन फिर भी उसी शाखा के नाम को ट्रैक कर रहे हैं।
कैस्केबेल


5
इस पर विचार करना मुश्किल है कि आप मौजूदा गिट शाखा को दूरस्थ शाखा कैसे बनाते हैं? । यह प्रश्न निर्दिष्ट नहीं करता है कि शाखा पहले से ही एक दूरस्थ शाखा पर नज़र रख रही है। यह एक करता है।

1
मुझे लगता है कि इस तरह के बारे में जाने के लिए कॉन्फिग फाइल को एडिट करना सबसे आसान और सुरक्षित तरीका है
स्टीवन लू

जवाबों:


1079

Git v1.8.0 या बाद का उपयोग करना :

git branch branch_name --set-upstream-to your_new_remote/branch_name

या आप -uस्विच का उपयोग कर सकते हैं :

git branch branch_name -u your_new_remote/branch_name

Git v1.7.12 या पूर्ववर्ती का उपयोग करना :

git branch --set-upstream branch_name your_new_remote/branch_name


2
यह वही था जो मैं देख रहा था - दी गई शाखा के लिए रिमोट ट्रैकिंग शाखा को बदल दिया। धन्यवाद!
joachim

7
आह, मेरी बुर। मैं अभी भी इसे कॉन्फ़िगर के माध्यम से करूंगा, क्योंकि आप गलती से शाखा का नाम नहीं बदल सकते हैं, लेकिन सभी अच्छे हैं। +1।
Cascabel

से 1.8.0 रिलीज नोट्स : Git शाखा --set-नदी के ऊपर मूल / मास्टर "यह कहना आकर्षक था" ", लेकिन वह कहता है Git स्थानीय शाखा की व्यवस्था करने के" अभी चेक आउट शाखा के साथ एकीकृत करने के लिए मूल / मास्टर ", जो उपयोगकर्ता की अभिप्राय से अत्यधिक संभावना नहीं है। विकल्प को हटा दिया गया है, इसके बजाय नए "--सेट-अपस्ट्रीम-टू" (एक छोटी और मीठी "-यू") विकल्प का उपयोग करें। "
जैरेड बेक

इतना साफ ;_; मैं इतनी आसानी से बनाई गई थोड़ी गंदगी को ठीक कर सकता था! साभार =))
आदित्य एमपी

56
यदि दूरस्थ ट्रैकिंग शाखा अभी तक मौजूद नहीं है, लेकिन मौजूदा दूरस्थ ट्रैकिंग शाखा को वर्तमान में ट्रैक किया गया है, तो इसे मौजूदा-नई दूरस्थ ट्रैकिंग शाखा में नहीं बदला जा सकता है। आपको पहले दूरस्थ ट्रैकिंग शाखा को चालू करने की आवश्यकता है: git branch --unset-upstream- फिर यह इस उत्तर में (या अगले के साथ git push -u / --set-upstream) के रूप में काम करता है ।
हैकर

88

मेरे लिए यह तय था:

git remote set-url origin https://some_url/some_repo

फिर:

git push

3
यह गीथूब ऐसा करने के लिए कहता है। help.github.com/articles/changing-a-remote-s-url
fsharp

18
यह वास्तव में बदलता है जहां रिमोट है, यह नहीं बदलता है कि आप कौन से रिमोट को ट्रैक कर रहे हैं (तकनीकी रूप से) - आप अभी भी "मूल" पर नज़र रख रहे हैं, यह सिर्फ मूल की परिभाषा को अपडेट करता है। कुछ उपयोग मामलों के लिए यह एक बुरी बात हो सकती है। मान लीजिए आपने jQuery को कांटा और एक नया रिमोट बनाया। "मूल" आपका कांटा है, "अपस्ट्रीम" jQuery है। फिर मान लीजिए कि आपको अपने फोर्क के बजाय मूल रेपो को अस्थायी रूप से ट्रैक करने की आवश्यकता है। यदि आप इसका इस्तेमाल करते हैं set-urlऔर इसे वापस सेट करना भूल जाते हैं, तो भविष्य की git pushकमांड विफल हो जाएगी
stevendesu

42

अप टू डेट git (2.5.5) के साथ कमांड निम्नलिखित है:

git branch --set-upstream-to=origin/branch

यह आपके वर्तमान स्थानीय शाखा के लिए दूरस्थ ट्रैक की गई शाखा को अपडेट करेगा


3
हिटिंग git branch --set-upstream-to=origin/developने त्रुटि को उठाया error: the requested upstream branch 'origin/develop' does not exist:। पहले, मैंने एक दूरस्थ शाखा का नाम बदलकर डीलेप किया।
बेलगॉरस

1
git fetch --allशायद @belgoros ?
गेब्रियल डेविलर्स 8

25

एक और विकल्प यह है कि आपके कॉन्फ़िगरेशन को हाथ से संपादित करने के लिए बहुत अधिक नियंत्रण है:

git config --edit

या आशुलिपि

git config -e

फिर वसीयत में फ़ाइल को संपादित करें, सहेजें और आपके संशोधनों को लागू किया जाएगा।


1
इससे मेरे लिए दिन बच गया। धन्यवाद!
मार्टिन चैम्बरलिन

मेरा मुद्दा यह था कि दो मूल थे। (उत्पत्ति और उत्पत्ति-अलगो)। लेकिन स्थानीय मास्टर "मूल-एल्गो" पर नज़र रख रहे थे। लेकिन मैं चाहता था कि यह "मूल" को ट्रैक करे। एकमात्र तरीका जो मैं बदल सकता था वह था git config को संपादित करके।
आश्विन प्रसाद

19

यदि आप इसके बारे में समझदार हैं, तो कॉन्फिग फाइल को सुरक्षित रूप से संपादित करना। यदि आप थोड़ा अधिक पागल होना चाहते हैं, तो आप इसे संशोधित करने के लिए चीनी मिट्टी के बरतन आदेश का उपयोग कर सकते हैं:

git config branch.master.remote newserver

बेशक, यदि आप पहले और बाद में कॉन्फ़िगरेशन को देखते हैं, तो आप देखेंगे कि यह वही किया गया था जो आप करने जा रहे थे।

लेकिन आपके व्यक्तिगत मामले में, मैं क्या करूँगा:

git remote rename origin old-origin
git remote rename new-origin origin

यही है, अगर नया सर्वर विहित रिमोट होने जा रहा है, तो इसे मूल क्यों नहीं कहेंगे जैसे कि आप मूल रूप से इसे क्लोन करते हैं?


3
मैंने वास्तव में ऐसा किया था कि इस समस्या को हल करने से पहले - गिट चतुर था और दूरस्थ फ़ाइल के माध्यम से रिमोट का नाम बदल दिया गया था, इसलिए आपके उदाहरण में, मेरी कॉन्फ़िगरेशन फ़ाइल ने 'पुराना-मूल' कहा।
जोचिम

व्यक्तिगत रूप से, मुझे लगता है कि यह तरीका स्वीकार किए गए तरीके की तुलना में अधिक समझदार है, लेकिन मुझे लगता है कि वे कार्यात्मक रूप से समकक्ष हैं, सही है?
इवान डोनोवन

1
@Jefromi: एक remote renameक्या, क्योंकि यह दोनों में दूरदराज के नाम में परिवर्तन के लिए कहा जा रहा है ऐसा नहीं करेंगे [remote]कॉन्फ़िगरेशन और में [branch]कॉन्फ़िगरेशन। तो इस मामले में किसी को क्या करने की ज़रूरत है, कॉन्फ़िगर फ़ाइल को संपादित करना और जो आप कह रहे हैं (रीमोट्स का नाम बदलना) बस [remote]कॉन्फ़िगरेशन लाइनों पर।
सुमीत पारीक

7
git fetch origin
git checkout --track -b local_branch_name origin/branch_name

या

git fetch
git checkout -b local_branch_name origin/branch_name

मेरे केस के लिए मुझे जरूरत थी git fetch। मैंने बिटबकेट में एक नई शाखा बनाई थी और इसे स्विच करना चाहता था। git दूरस्थ परिवर्तनों के बारे में नहीं जानता है इसलिए मुझे git fetchपहले क्या करना था git checkout feature/new-feature-branch। मनाइए कि यह किसी और के लिए सहायक हो।
तेलमोनएगीसथुस

6

यह सबसे आसान आदेश है:

git push --set-upstream <new-origin> <branch-to-track>

उदाहरण के लिए, दिए गए आदेश git remote -vकुछ इस तरह का उत्पादन करते हैं:

origin  ssh://git@bitbucket.some.corp/~myself/projectr.git (fetch)
origin  ssh://git@bitbucket.some.corp/~myself/projectr.git (push)
team    ssh://git@bitbucket.some.corp/vbs/projectr.git (fetch)
team    ssh://git@bitbucket.some.corp/vbs/projectr.git (push)

इसके बजाय टीम को ट्रैक करने के लिए बदलना:

git push --set-upstream team master

ट्रैक करने के लिए शाखा वैकल्पिक है जब अस्पष्ट कुछ भी नहीं है। जीथब से दूर जाने पर मैंने आपके सुझाव का इस्तेमाल किया;) धन्यवाद।
गौसिज

4

आप अपनी वर्तमान शाखा को हटा सकते हैं और कर सकते हैं:

git branch --track local_branch remote_branch

या दूरस्थ सर्वर को कॉन्फ़िगरेशन में वर्तमान एक में बदल दें


मेरे लिए काम नहीं किया, केवल काम करने का आदेश @uma से एक था: git checkout --track -b local_branch_name origin/branch_name
साद बेनबोज़िड

2

नवीनतम गिट प्रलेखन से मुझे जो समझ में आता है, उसके आधार पर सिनोप्सिस है:

git branch -u upstream-branch local-branch
git branch --set-upstream-to=upstream-branch local-branch

यह उपयोग urschrei के उत्तर की तुलना में थोड़ा अलग लगता है, जैसा कि उनके सारांश में है:

git branch local-branch -u upstream-branch 
git branch local-branch --set-upstream-to=upstream-branch 

मैं अनुमान लगा रहा हूं कि उन्होंने फिर से दस्तावेज बदल दिए?


1

2.7.4 जैसे नवीनतम गिट संस्करण में ,

git checkout branch_name # शाखा नाम जिसे आप ट्रैकिंग शाखा बदलना चाहते हैं

git branch --set-upstream-to=upstream/tracking_branch_name # स्तूप - दूरस्थ नाम


1

मुझे @Critikaster की पोस्ट मददगार लगी है , सिवाय इसके कि मुझे GIT 2.21 के साथ ये कमांड करने थे:

$ git remote set-url origin https://some_url/some_repo
$ git push --set-upstream origin master

0

सबसे आसान तरीका यह है कि आप नई शाखा में जाएं:

git पुश -u मूल शाखा / नाम

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