2012-06-29 19 views
145

पर बनाई गई एक नई रिमोट शाखा को ट्रैक करें मुझे पहले से ही एक स्थानीय मास्टर शाखा मिली है जो एक जिथब प्रोजेक्ट की रिमोट मास्टर शाखा को ट्रैक कर रही है। अब, मेरा एक सहयोगी एक ही परियोजना में एक नई शाखा पैदा कर दी है, और मैं उसी के अनुसार निम्न कार्य करना चाहते हैं:गिटहब

  1. स्थानीय स्तर पर
  2. कर इस नई शाखा को ट्रैक नव दूरस्थ शाखा बनाने एक नई शाखा पैदा करते हैं।

मुझे इसे ठीक से कैसे करना चाहिए?

+1

गिट चेकआउट --track -b <स्थानीय शाखा>/<ट्रैक की गई शाखा> भी काम करती है। – MLister

+10

... या बस 'गिट चेकआउट -t / '।यदि वहां केवल एक रिमोट-ट्रैकिंग शाखा है जो ' 'में समाप्त होती है तो आप' गिट चेकआउट 'भी कर सकते हैं और अनुमान लगा सकते हैं कि आपका क्या मतलब है। –

+0

यह भी देखें [आप एक मौजूदा गिट शाखा को रिमोट शाखा कैसे ट्रैक करते हैं?] (Http://stackoverflow.com/q/520650/456814)। –

उत्तर

196
git fetch 
git branch --track branch-name origin/branch-name 

पहला आदेश सुनिश्चित करता है कि आपके पास स्थानीय भंडार में दूरस्थ शाखा है। दूसरा आदेश स्थानीय शाखा बनाता है जो दूरस्थ शाखा को ट्रैक करता है। यह मानता है कि आपका रिमोट नाम origin है और शाखा का नाम branch-name है।

--track विकल्प दूरस्थ शाखाओं के लिए डिफ़ॉल्ट रूप से सक्षम है और आप इसे छोड़ सकते हैं।

+3

जब मैं ऐसा करता हूं, मुझे चेतावनी मिलती है: 'शाखा-नाम' का नाम 'अस्पष्ट' है। – Ultrasaurus

+14

यदि उस शाखा के नाम के साथ केवल एक दूरस्थ शाखा है, तो आप केवल 'गिट चेकआउट ' कर सकते हैं और गिट स्वचालित रूप से इसे जांचकर एक ट्रैकिंग शाखा सेट कर देगा। सिर्फ इस टिप्पणी में @ मार्क लॉन्गएयर ने जो कहा था उसे दोहराना चाहता था: http://stackoverflow.com/questions/11262703/how-to-track-a-new-remote-branch-created-on-github#comment14806580_11262703। –

+0

मेरी रिमोट शाखा का नाम 'रिमोट/मूल/विकास' है? क्या यह सिर्फ 'उत्पत्ति/विकास' नहीं होना चाहिए? क्या ये वही हैं? –

5

जब शाखा कोई रिमोट शाखा नहीं है तो आप अपनी स्थानीय शाखा को सीधे रिमोट पर धक्का दे सकते हैं।

git checkout master 
git push origin master 

या आप एक देव शाखा

git checkout dev 
git push origin dev 

है या जब दूरस्थ शाखा मौजूद

git branch dev -t origin/dev 

कुछ अन्य posibilites एक दूरस्थ शाखा पुश करने के लिए कर रहे हैं जब।

आप सभी दूरस्थ भंडार लाने के लिए है
+0

धन्यवाद। लेकिन मुझे नहीं लगता कि मैं यहां 'रिमोट शाखा' को धक्का देना चाहता हूं ... – MLister

+0

फिर आप तीसरा विकल्प लेते हैं। जब रिमोट शाखा मौजूद है तो आप एक स्थानीय शाखा बना सकते हैं और रिमोट शाखा को ट्रैक कर सकते हैं :) यह अधिकतम लेकिन छोटे से संस्करण के समान है। – Stony

26

पहले:

git fetch remoteName 

से आप नई शाखा बना सकते हैं और दूरदराज के शाखा आप चाहते हैं ट्रैक करने के लिए इसे सेट अप कर सकते हैं: आप कर सकते हैं

git checkout -b newLocalBranch remoteName/remoteBranch 

अधिकतम निर्दिष्ट के रूप में "गिट चेकआउट-बी" के बजाय "गिट शाखा --track" का भी उपयोग करें।

git branch --track newLocalBranch remoteName/remoteBranch 
+0

यदि आप रिमोट शाखा का उपयोग शुरुआती बिंदु के रूप में 'चेकआउट-बी' करते हैं, तो यह वास्तव में '--track' का उपयोग करने के लिए अनावश्यक है। –

+5

इसके अलावा, जैसा कि [इस टिप्पणी] में बताया गया है (http://stackoverflow.com/questions/11262703/how-to-track-a-new-remote-branch-created-on-github#comment32122710_11262780), अगर आप बस 'गिट चेकआउट ' करें, और उसी नाम के साथ एक दूरस्थ शाखा है (आपके द्वारा 'गिट फ़ेच' करने के बाद), तो स्थानीय शाखा स्वचालित रूप से दूरस्थ ट्रैक को ट्रैक करने के लिए सेट की जाएगी। –

23

यदि आप किसी मौजूदा स्थानीय शाखा की जरूरत नहीं है, तो यह वास्तव में के रूप में सरल है: अगर आप लाने

git fetch 
git checkout <remote-branch-name> 

उदाहरण के लिए और वहाँ एक नया रिमोट ट्रैकिंग शाखा origin/feature/Main_Page कहा जाता है, बस करो यह:

git checkout feature/Main_Page 

यह दूरस्थ शाखा के समान नाम के साथ एक स्थानीय शाखा बनाता है, जो दूरस्थ शाखा को ट्रैक करता है। आप एक ही शाखा का नाम के साथ कई रिमोट है, तो आप कम अस्पष्ट उपयोग कर सकते हैं:

git checkout -t <remote>/<remote-branch-name> 

आप पहले से ही स्थानीय शाखा की है, तो और, How do you make an existing Git branch track a remote branch? देख पा रहे हैं इसे हटाने के लिए नहीं करना चाहता।

+0

'गिट चेकआउट 1.5-शाखा '(' रिमोट्स/अपस्ट्रीम/1.5-शाखा'' गिट शाखा-ए' 'के आउटपुट में है) परिणाम' त्रुटि: पथस्पेक '1.5-शाखा' किसी फ़ाइल से मेल नहीं खाती गिट करने के लिए। 'इसे गिट चेकआउट अपस्ट्रीम/1.5-शाखा' के परिणामस्वरूप अलग-अलग सिर में बदलना और कोई स्थानीय शाखा नहीं बनाई गई है। मुझे लगता है कि उत्तर का यह हिस्सा बस गलत है। यह गिट 2.4.3 –

+0

के साथ है पहला आदेश मेरे लिए गिट 1.9.3 में, मेरे लिए अलग-अलग रिमोट के लिए भी काम करता है। यह संभव है कि यह व्यवहार बदल गया है। आपके दूसरे आदेश का परिणाम वह है जो मैं उम्मीद करता हूं। बिना, आप यह निर्दिष्ट नहीं कर रहे हैं कि आप रिमोट पर उस विशिष्ट संस्करण को देखने के अलावा कुछ और करना चाहते हैं। – kotoole

+1

मैं @PiotrDobrogost से सहमत हूं, मुझे आपका कथन है "यह एक ही नाम के साथ एक स्थानीय शाखा बनाता है ..." गलत है। क्या होगा * करेंगे * (जब इस तरह से कहा जाता है) रिमोट पर प्रत्येक शाखा के लिए * रिमोट ट्रैकिंग शाखा * बनाते हैं। इसका मतलब है कि आपके स्थानीय रेपो पर एक शाखा '/' नाम की एक शाखा है। एक रिमोट ट्रैकिंग शाखा केवल पढ़ने के लिए है, यह दर्शाती है कि अंतिम शाखा में रिमोट पर वह शाखा कहां थी। उस शाखा पर 'चेकआउट' को कॉल करने से आपको अलग-अलग सिर मोड में रखा जाता है, जैसा कि पियेटर कहते हैं। ध्यान दें कि अवांछित रिमोट ट्रैकिंग शाखाओं को बनाने से बचने के लिए रिमोट शाखा निर्दिष्ट करना। – scanny