Git रिमोट को 'पुश' में बदलना


228

मैं Git डिफ़ॉल्ट दूरस्थ शाखा गंतव्य को बदलना चाहता हूं ताकि मैं बस कर सकूं

git push

के बजाय:

git push upstream

वर्तमान में यह मूल रिमोट पर सेट है और मैं इसे अलग रिमोट में सेट करना चाहता हूं।

मैंने मूल (क्लोन से दूरस्थ) को हटाने की कोशिश की

git remote rm origin

जिसने मूल रिमोट को हटा दिया। लेकिन git pushसमस्या का समाधान नहीं है। मुझे अभी भी मिलता है:

घातक: कोई कॉन्फ़िगर धक्का गंतव्य नहीं है।
कमांड-लाइन से या तो URL निर्दिष्ट करें या किसी दूरस्थ रिपॉजिटरी का उपयोग करके कॉन्फ़िगर करें ...

मैंने भी इसके साथ खेलने की कोशिश की:

git remote set-url --push myfork origin

और अन्य विकल्प लेकिन कोई भी काम नहीं कर रहा है (हो सकता है क्योंकि मैंने मूल रिमोट को जल्द ही हटा दिया हो?)

यहाँ जवाब के बाद मैंने बदलने की कोशिश की:

git config push.default upstream (or matching)

लेकिन न तो काम किया।

जवाबों:


215

आप git push -u <remote_name> <local_branch_name>डिफ़ॉल्ट अपस्ट्रीम सेट करने के लिए उपयोग कर सकते हैं । देखें Git धक्का के लिए दस्तावेज़ अधिक जानकारी के लिए।


1
काम नहीं करता है: मुझे '' घातक '' मिलता है: '' मूल '' जीटी रिपॉजिटरी के लिए घातक नहीं होता है: दूरस्थ छोर अनपेक्षित रूप से लटका हुआ है '' '' हो सकता है क्योंकि मैंने आगे बढ़ने से पहले मूल रिमोट को हटा दिया हो। बस एक काम कर समाधान मिल गया, मैं एक उत्तर में अद्यतन
करेगा

34
एक अतिरिक्त स्पष्टीकरण के रूप में, वाक्यविन्यास होना चाहिए git push -u <remote_name> <local_branch_name>:<corresponding_remote_branch_name>
मार्को लेज़ेररी

33
उदाहरण: git push -u origin master:master
स्टारबिम्रेनबोलाब्स

1
एक डिफ़ॉल्ट रिमोट सेट करने के बाद ... वैसे भी ऐसा नहीं है कि आप git pushवर्तमान स्थानीय शाखा के दूरस्थ शाखा को धक्का देने के लिए मजबूर कर सकते हैं ? मेरा मतलब है कि ऐसा करने का मतलब है कि मुझे हर शाखा के लिए इस कमांड को चलाना होगा। सही? क्या मैं अभी पूरे रेपो के लिए प्रारंभिक सेटअप नहीं कर सकता हूं? @ मर्कोलज़ेरज़ी
हनी

2
@starbeamrainbowlabs git push -u origin masterपर्याप्त नहीं है ? क्या आप केवल पूर्ण वाक्य-विन्यास को चित्रित कर रहे हैं?
जोसिया योडर

108

अपनी शाखा के लिए जो अपस्ट्रीम रिमोट "वायर्ड" है उसे बदलने के लिए, git branchअपस्ट्रीम कॉन्फ़िगरेशन फ्लैग के साथ कमांड का उपयोग करें ।

सुनिश्चित करें कि रिमोट पहले मौजूद है:

git remote -vv

वर्तमान (चेक आउट) शाखा के लिए पसंदीदा रिमोट सेट करें:

git branch --set-upstream-to <remote-name>

शाखा को सही अपस्ट्रीम रिमोट के साथ सेटअप करें:

git branch -vv


2
बस कोशिश की git branch --set-upstream-to myforkऔर एक त्रुटि मिली:> त्रुटि: अज्ञात विकल्प `सेट-अपस्ट्रीम-टू 'मैं git 1.7.9 चला रहा हूँ
alonisser

3
सिंटैक्स 1.8 में बदल गया, देखें stackoverflow.com/questions/520650/…
jtniehof

1
निम्नलिखित उत्तर देखें: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
योनोन एर्लिच

10
git branch -u <remotename>/<branch>मेरे लिए काम किया। कमांड को स्थानीय शाखा के साथ चलाया गया था। 'ट्रैकिंग शाखाओं' में git-scm.com/book/it/v2/Git-Branching-Remote-Branches
नोरियो

2
रिमोट कमांड वर्बोज आउटपुट वास्तव में git remote -vया है git remote --verbose-vvके अतिरिक्त वी अनावश्यक है।
Artif3x

45

काम 2.3.2 के साथ ...

git branch --set-upstream-to myfork/master

अब status, pushऔर दूरस्थ pullको इंगित किया जाता हैmyfork


यह तब काम करता है जब आप डिफ़ॉल्ट को भी सेट करना चाहते हैं pull
स्टिंगजैक

39

आप आसानी से इस कमांड का उपयोग करके एक बार में सभी शाखाओं के लिए डिफ़ॉल्ट रिमोट बदल सकते हैं

git push -u <remote_name> --all

14
बस ध्यान दें, यह उन सभी को धक्का देगा, साथ ही साथ अपने अपस्ट्रीम रिमोट को बदलना होगा।
पूलि

16

यदि आपने किया git push origin -u localBranchName:remoteBranchNameऔर क्रमिक रूप से git pushआदेश दिया, तो आपको ऐसी त्रुटियां मिलती हैं जो तब उत्पन्न नहीं होती हैं, फिर इन चरणों का पालन करें:

  1. git remote -v

जांचें कि क्या कोई रिमोट है जिसकी मुझे परवाह नहीं है। के साथ उन्हें हटा देंgit remote remove 'name'

  1. git config --edit

पुराने / गैर-मौजूद रिमोट के संभावित संकेतों को देखें। इसके लिए देखें pushdefault:

[remote]
  pushdefault = oldremote

अपडेट करें oldremoteमूल्य और सहेजें।

git push अब काम करना चाहिए।


2
धन्यवाद! मांसपेशियों की स्मृति के कारण एक अलग रिमोट -uका उपयोग करते समय मैं जोड़ना चाहता हूं git push। यह दिए गए रिमोट को डिफ़ॉल्ट बनाता है, इसे वापस सेट करके git config --edit(या फिर से पुश करके और नया रिमोट सेट करके) समस्या को हल करता है।
टिम विज़

13

बस एक स्पष्टीकरण (ubuntu 12.04 पर git संस्करण 1.7.9.5 का उपयोग करके):

Git रिमूव जोड़ / हटा देगा। ये एक सर्वर से जुड़े git के दूरस्थ उदाहरण हैं।

git remote add myremote git://remoteurl

फिर आप कह सकते हैं कि git रिपॉजिटरी को ऐसा कहा जा सकता है:

git fetch myremote

ऐसा लगता है कि यह 'myremote' नाम की एक शाखा बनाता है, हालांकि शाखा के लिए रिमोट स्वचालित रूप से सेट नहीं होता है। ऐसा करने के लिए, आपको निम्न कार्य करने होंगे:

पहले, सत्यापित करें कि आपको यह समस्या है, अर्थात

git config -l | grep myremote

आपको कुछ इस तरह देखना चाहिए:

remote.myremote.url=git://remoteurl
remote.myremote.fetch=+refs/heads/*:refs/remotes/myremote/*
branch.myremote.remote=.
branch.myremote.merge=refs/heads/master

यदि आप देखते हैं branch.myremote.remote=., तो आपको आगे बढ़ना चाहिए:

git config branch.myremote.remote myremote
git checkout myremote
git pull

अब आपको दूरस्थ रिपॉजिटरी के साथ अद्यतित होना चाहिए, और आपके खींच / पुश को उपयुक्त रिमोट से बांधा जाना चाहिए। आप इस तरीके से, प्रति शाखा में रिमोट को स्विच कर सकते हैं । [नोट 1]

के अनुसार एक सरकारी Git कॉन्फ़िग प्रलेखन , आप एक सेट कर सकते हैं डिफ़ॉल्ट , धक्का शाखा (बस उस पृष्ठ पर remote.pushdefault खोज) लेकिन ध्यान रखें कि इस खजाने / शाखाओं जो पहले से ही मौजूद प्रभावित नहीं करेगा, तो यह काम करेगा, लेकिन केवल नई रिपोजिटरी / शाखाओं के लिए। आपको याद रखना चाहिए कि --globalउपयोगकर्ता-विशिष्ट रिपॉजिटरी डिफॉल्ट्स (~ / .gitconfig) सेट करेगा,--system को सेट करेगा सिस्टम-वाइड रिपॉजिटरी डिफॉल्ट्स (/ etc / gitconfig) सेट करेगा, और कोई भी फ्लैग वर्तमान रिपॉजिटरी (./.itconfig) के लिए कॉन्फ़िगरेशन विकल्प सेट नहीं करेगा।

यह भी ध्यान दिया जाना चाहिए कि push.default config विकल्प रेफ-स्पेक व्यवहार को कॉन्फ़िगर करने के लिए है, रिमोट नहीं व्यवहार के लिए।

[१]: git branch --set-upstream myotherremoteआमतौर पर यहां काम होगा, हालांकि गिट की शिकायत होगी कि इसका उपयोग होने पर यह अपने स्वयं के रिमोट के रूप में एक शाखा स्थापित नहीं करेगा git branch --set-upstream myremote। मेरा मानना ​​है कि यह गलत व्यवहार है।


इसके बजाय git config -l | grep myremote, आप बस का उपयोग कर सकते हैं:git config --get branch.myremote.remote
10

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

10

यह .git/configआपके रेपो के अंदर एक नज़र डालने में मददगार हो सकता है , यह सभी रीमोट को सूचीबद्ध करेगा और प्रत्येक शाखा के लिए डिफ़ॉल्ट रिमोट भी होगा

जैसे।

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@gitea.xxx.be:fii/web2016.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "bugfix/#8302"]
    remote = origin
    merge = "refs/heads/bugfix/#8302"
[branch "feature/#8331"]
    remote = origin
    merge = "refs/heads/feature/#8331"
[remote "scm"]
    url = https://scm.xxx.be/git/web2016bs.git
    fetch = +refs/heads/*:refs/remotes/scm/*

आप अवांछित रिमोट को निकालने के लिए इस फाइल में मैनुअल बदलाव कर सकते हैं, या आपके पास विभिन्न शाखाओं के लिए डिफ़ॉल्ट रीमोट अपडेट कर सकते हैं

  • ध्यान दें! रीमोट बदलते या हटाते समय इस कॉन्फिग फाइल में सभी संदर्भों को अपडेट करना सुनिश्चित करें

5

एक और तकनीक जिसे मैंने इसे हल करने के लिए पाया (भले ही मैंने पहले मूल को हटा दिया हो, जो कि एक गलती प्रतीत होती है) सीधे git config में हेरफेर कर रहा है:

git config remote.origin.url url-to-my-other-remote

5
यह एक अच्छा समाधान नहीं है, गिट उपयोगकर्ताओं को कई रिपॉजिटरी से खींचने / धक्का देने में सक्षम होना चाहिए - हालांकि यह आपको मूल के रिमोट को बदलने की अनुमति देगा, इसका मतलब यह नहीं है कि आप मूल रिमोट को बदल सकते हैं, क्योंकि इसका मतलब यह होगा कि वहाँ रीमोट के बीच कई असंगतताएं हैं। मर्ज यहां मदद करेगा, लेकिन यह सरल है और नई शाखा पर रिमोट सेट करने के लिए अधिक इतिहास को संरक्षित करता है।
smaudet

ऐसा करने का उचित तरीका नहीं है ... @ जॉर्डन का जवाब अधिक उपयुक्त है
राजा अन्बझगन

1
इन्हें भी देखें: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
यिनॉन एर्लिच

5

बहुत ही सरलता से, और इसमें कुछ महान टिप्पणियों के साथ-साथ मेरे अपने शोध के साथ-साथ कोबिंग भी।

सबसे पहले, उस स्थानीय शाखा की जाँच करें जिसे आप अपनी दूरस्थ शाखा से बाँधना चाहते हैं:

git checkout mybranch

आगे:

git branch -u origin/mybranch

कहाँ पे:

git branch -u {remote name}/{branch name}

आपको एक संदेश मिलना चाहिए:

"Branch mybranch set up to track remote branch mybranch from origin."

3

मेरे मामले में, मैंने निम्नलिखित को तय किया: * रन git config --edit * git config फाइल में:

[branch "master"]
remote = origin # <--- change the default origin here

0

git remote set-url --push origin काम करना चाहिए, जैसा कि आपने उल्लेख किया है, लेकिन आपको वैकल्पिक रूप से वैकल्पिक नाम के बजाय url प्रदान करने की आवश्यकता है, जैसे

git remote set-url --push origin git@github.com:contributor/repo.git

आप इस बात की पुष्टि कर सकते हैं कि क्या इसने काम किया है git remote -v। उदाहरण के लिए

λ ~/go/src/github.com/stretchr/testify/ master git remote -v
fork    git@github.com:contributor/testify.git (fetch)
fork    git@github.com:contributor/testify.git (push)
origin  git@github.com:stretchr/testify (fetch)
origin  git@github.com:contributor/testify.git (push)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.