git - एक मौजूदा गिट शाखा को रिमोट शाखा ट्रैक करें?




branch git-branch (13)

मुझे पता है कि रिमोट शाखाओं को ट्रैक करने वाली एक नई शाखा कैसे बनाई जाए, लेकिन मैं एक मौजूदा शाखा को रिमोट शाखा कैसे ट्रैक करूं?

मुझे पता है कि मैं सिर्फ .git/config फ़ाइल को संपादित कर सकता हूं, लेकिन ऐसा लगता है कि एक आसान तरीका होना चाहिए।


'--Track' विकल्प का प्रयोग करें

  • एक git pull बाद:

    git checkout --track <remote-branch-name>

  • या:

    git fetch && git checkout <branch-name>


1- अपने स्थानीय मेटा-डेटा का उपयोग करके अद्यतन करें: गिट fetch --all

2- अपनी रिमोट और स्थानीय शाखाओं का उपयोग करके: गिट शाखा-ए , निम्नलिखित स्क्रीनशॉट देखें

3- लक्षित शाखा पर स्विच करें, जिसे आप रिमोट से जोड़ना चाहते हैं: का उपयोग कर

गिट चेकआउट शाखा नाम

उदाहरण :

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

गिट शाखा - सेट-अपस्ट्रीम-टू नाम ओफ्रेमोट ब्रंच

एनबी: nameOfRemoteBranch : चरण 2 "गिट शाखा -r" के आउटपुट से कॉपी करने के लिए

उपयोग का उदाहरण:


असल में काम के स्वीकृत उत्तर के लिए:

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa

आप निम्नलिखित कर सकते हैं (माना जाता है कि आप मास्टर पर चेक आउट हैं और रिमोट ब्रांच मास्टर को धक्का देना चाहते हैं):

यदि आपके पास पहले से नहीं है तो 'रिमोट' सेट अप करें

git remote add origin ssh://...

अब ट्रैक करने के लिए मास्टर को कॉन्फ़िगर करें:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

और धक्का:

git push origin master

एक शाखा foo और रिमोट upstream को देखते हुए:

गिट 1.8.0 के रूप में:

git branch -u upstream/foo

या, यदि स्थानीय शाखा foo वर्तमान शाखा नहीं है:

git branch -u upstream/foo foo

या, यदि आप लंबे आदेश टाइप करना चाहते हैं, तो ये उपर्युक्त दो के बराबर हैं:

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

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

गिट 1.7.0 के रूप में:

git branch --set-upstream foo upstream/foo

टिप्पणियाँ:

उपर्युक्त सभी आदेश रिमोट upstream से दूरस्थ शाखा foo को ट्रैक करने के लिए स्थानीय शाखा foo का कारण upstream । पुराने (1.7.एक्स) वाक्यविन्यास को नए (1.8+) वाक्यविन्यास के पक्ष में बहिष्कृत किया गया है। नया वाक्यविन्यास अधिक सहज और याद रखने में आसान होना है।

यह भी देखें: मुझे हर समय 'सेट-अपस्ट्रीम' क्यों करने की ज़रूरत है?


कुछ हद तक संबंधित तरीके से मैं एक मौजूदा शाखा में रिमोट ट्रैकिंग शाखा जोड़ने की कोशिश कर रहा था, लेकिन उस सिस्टम पर उस रिमोट रिपोजिटरी तक पहुंच नहीं थी, जहां मैं उस रिमोट ट्रैकिंग शाखा को जोड़ना चाहता था (क्योंकि मैं अक्सर इसकी एक प्रति निर्यात करता हूं स्नीकनेट के माध्यम से किसी अन्य सिस्टम में रेपो करें जिसमें उस रिमोट को धक्का देने की पहुंच है)। मैंने पाया कि स्थानीय पर रिमोट शाखा जोड़ने को मजबूर करने का कोई तरीका नहीं था जिसे अभी तक नहीं मिला था (इसलिए स्थानीय को पता नहीं था कि शाखा रिमोट पर मौजूद थी और मुझे त्रुटि मिल जाएगी: the requested upstream branch 'origin/remotebranchname' does not exist )।

अंत में मैं .git/refs/remotes/origin/remotebranchname पर एक नई हेड फ़ाइल जोड़कर नई, पहले अज्ञात रिमोट शाखा (बिना लाने के) जोड़ने में .git/refs/remotes/origin/remotebranchname और फिर रेफरी की प्रतिलिपि बना रहा ( .git/refs/remotes/origin/remotebranchname तेज थी, जैसा कि लंगड़ा था; -) वर्कस्टेशन के मूल रेपो तक पहुंच के साथ सिस्टम से (स्थानीय रिपो के साथ जहां मैं रिमोट शाखा जोड़ रहा था)।

एक बार ऐसा करने के बाद, मैं git branch --set-upstream-to=origin/remotebranchname उपयोग कर सकता था


बहुत कम में

git branch --set-upstream yourLocalBranchName origin/develop

यह आपके yourLocalBranchName नामक दूरस्थ शाखा को ट्रैक करेगा।


मेरा मानना ​​है कि गिट 1.5.x के आरंभ में आप एक स्थानीय शाखा $BRANCH दूरस्थ शाखा origin/$BRANCH शाखा ट्रैक कर सकते हैं।

यह देखते हुए कि $BRANCH और origin/$BRANCH मौजूद है, और आपने वर्तमान में $BRANCH जांच नहीं की है (यदि आपके पास है तो स्विच करें), करें:

git branch -f --track $BRANCH origin/$BRANCH

यह एक ट्रैकिंग शाखा के रूप में $BRANCH पुन: प्रयास करता है। पहले से मौजूद $BRANCH बावजूद सृजन को मजबूर करता है। --track सामान्य डिफ़ॉल्ट डिफ़ॉल्ट होने पर --track वैकल्पिक है (यानी, गिट-कॉन्फ़िगर पैरामीटर branch.autosetupmerge सत्य है)।

नोट, यदि origin/$BRANCH अभी तक मौजूद नहीं है, तो आप इसे अपने स्थानीय $BRANCH को रिमोट रिपोजिटरी में दबाकर बना सकते हैं:

git push origin $BRANCH

स्थानीय शाखा को एक ट्रैकिंग शाखा में बढ़ावा देने के लिए पिछले आदेश का पालन किया गया।


मैं निम्नलिखित कमांड का उपयोग करता हूं (मान लीजिए कि आपका स्थानीय शाखा नाम "शाखा-नाम-स्थानीय" है और दूरस्थ शाखा का नाम "शाखा-नाम-रिमोट" है):

$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local

यदि स्थानीय और दूरस्थ दोनों शाखाओं का एक ही नाम है, तो बस निम्न कार्य करें:

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

यह इस सवाल का सीधा जवाब नहीं है, लेकिन मैं यहां किसी भी ऐसे व्यक्ति के लिए एक नोट छोड़ना चाहता हूं जो अपस्ट्रीम शाखा को कॉन्फ़िगर करने का प्रयास करते समय मेरे जैसा ही मुद्दा हो।

Push.default से सावधान रहें।

पुराने गिट संस्करणों के साथ, डिफ़ॉल्ट मिलान कर रहा था, जो आपके पास बहुत अवांछनीय व्यवहार का कारण बनता है, उदाहरण के लिए:

स्थानीय शाखा "मास्टर" मूल / मास्टर के लिए ट्रैकिंग

अपस्ट्रीम / मास्टर को रिमोट शाखा "अपस्ट्रीम" ट्रैकिंग

यदि आपने "अपस्ट्रीम" शाखा पर "गिट पुश" करने का प्रयास किया है, तो push.default मिलान करने वाला गिट स्वचालित रूप से स्थानीय शाखा "मास्टर" को "अपस्ट्रीम / मास्टर" में विलय करने का प्रयास करेगा, जिससे पूरी तरह अराजकता हो सकती है।

यह अधिक कामुक व्यवहार देता है:

गिट कॉन्फ़िगरेशन - ग्लोबल push.default अपस्ट्रीम


यहां, github और git version 2.1.4 का उपयोग करके, बस करें:

$ git clone [email protected]:user/repo.git

और रिमोट इटेलसेफ द्वारा आते हैं, भले ही स्थानीय रूप से लिंक न हों:

$ git remote show origin

* remote origin
  Fetch URL: [email protected]:user/repo.git
  Push  URL: [email protected]:user/repo.git
  HEAD branch: master
  Remote branches:
    develop tracked         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    master  tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

लेकिन बेशक, अभी भी कोई स्थानीय शाखा नहीं है:

$ git branch
* master                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

देख? अब अगर आप सिर्फ डेवेलप चेकआउट करते हैं, तो यह स्वचालित रूप से जादू करेगा:

$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'

इतना आसान!

सारांश। बस यह 2 आदेश चलाएं:

$ git clone [email protected]:user/repo.git
$ git checkout develop

या बस द्वारा:

शाखा में स्विच करें यदि आप पहले से इसमें नहीं हैं:

[za]$ git checkout branch_name

रन

[za]$ git branch --set-upstream origin branch_name
Branch origin set up to track local branch brnach_name by rebasing.

और आप इसके लिए तैयार हैं:

 [za]$ git push origin branch_name

आप यह देखकर कॉन्फ़िगरेशन फ़ाइल पर एक नज़र डाल सकते हैं कि क्या चल रहा है ट्रैकिंग:

 [za]$ git config -e

यह जानना भी अच्छा है, यह दिखाता है कि किन शाखाओं को ट्रैक किया जाता है और कौन सा नहीं है। :

  [za]$ git remote show origin 

सुनिश्चित करें कि आप चलाते हैं:

git config push.default tracking

मुसीबत मुक्त करने में सक्षम होने के लिए





git-branch