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




10 Answers

एक शाखा 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+) वाक्यविन्यास के पक्ष में बहिष्कृत किया गया है। नया वाक्यविन्यास अधिक सहज और याद रखने में आसान होना है।

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

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

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




मैं इसे -u विकल्प के साथ धक्का देने के दुष्प्रभाव के रूप में करता हूं

$ git push -u origin branch-name

बराबर लंबा विकल्प है --set-upstream

git-branch कमांड भी --set-upstream समझता है, लेकिन इसका उपयोग भ्रमित हो सकता है। संस्करण 1.8.0 इंटरफ़ेस को संशोधित करता है।

git branch --set-upstream को हटा दिया गया है और इसे अपेक्षाकृत दूर के भविष्य में हटाया जा सकता है। git branch [-u|--set-upstream-to] को तर्कों के एक सनर आदेश के साथ पेश किया गया है।

...

यह git branch --set-upstream origin/master कहने के लिए मोहक था, लेकिन यह गिट को स्थानीय शाखा "मूल / मास्टर" की व्यवस्था करने के लिए वर्तमान में चेक आउट शाखा के साथ एकीकृत करने के लिए कहता है, जो कि उपयोगकर्ता के लिए अत्यधिक संभावना नहीं है। विकल्प बहिष्कृत है; इसके बजाए नए --set-upstream-to (एक शॉर्ट-एंड- -u - -u ) विकल्प का उपयोग करें।

मान लें कि आपके पास स्थानीय foo शाखा है और चाहते हैं कि वह शाखा को उसी नाम से उसका अपस्ट्रीम के रूप में पेश करे। इसके साथ ऐसा करें

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

या केवल

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



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

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



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

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

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

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

उदाहरण :

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

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

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

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




संपादन .git/config शायद सबसे आसान और सबसे तेज़ तरीका है। रिमोट शाखाओं को संभालने के लिए गिट कमांड यही है, वैसे भी।

यदि आप हाथ से फ़ाइल के साथ मक नहीं करना चाहते हैं (और यह करना मुश्किल नहीं है), तो आप हमेशा ऐसा करने के लिए git config का उपयोग कर सकते हैं ... लेकिन फिर, यह सिर्फ .git/config फ़ाइल को संपादित करने जा रहा है, वैसे भी।

निश्चित रूप से, git checkout का उपयोग करते समय रिमोट शाखा को स्वचालित रूप से ट्रैक करने के तरीके (उदाहरण के लिए --track ध्वज पास करके), लेकिन ये आदेश नई शाखाओं के साथ काम करते हैं, मौजूदा नहीं।




1.6.x के लिए, यह git_remote_branch टूल का उपयोग करके किया जा सकता है:

grb track foo upstream

इससे गिट को foo ट्रैक upstream/foo बनाने का कारण बन जाएगा।




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

  • एक git pull बाद:

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

  • या:

    git fetch && git checkout <branch-name>




कुछ हद तक संबंधित तरीके से मैं एक मौजूदा शाखा में रिमोट ट्रैकिंग शाखा जोड़ने की कोशिश कर रहा था, लेकिन उस सिस्टम पर उस रिमोट रिपोजिटरी तक पहुंच नहीं थी, जहां मैं उस रिमोट ट्रैकिंग शाखा को जोड़ना चाहता था (क्योंकि मैं अक्सर इसकी एक प्रति निर्यात करता हूं स्नीकनेट के माध्यम से किसी अन्य सिस्टम में रेपो करें जिसमें उस रिमोट को धक्का देने की पहुंच है)। मैंने पाया कि स्थानीय पर रिमोट शाखा जोड़ने को मजबूर करने का कोई तरीका नहीं था जिसे अभी तक नहीं मिला था (इसलिए स्थानीय को पता नहीं था कि शाखा रिमोट पर मौजूद थी और मुझे त्रुटि मिल जाएगी: 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 उपयोग कर सकता था




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

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

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

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

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

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

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

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




यह भी काम करेगा

git branch --set-upstream-to=/< remote>/< branch> < localbranch>



Related