किसी और के रेपो से दूरस्थ शाखा को कैसे खींचें


265

मुझे GitHub पर होस्ट किया गया एक प्रोजेक्ट मिला है, जिसे किसी ने कांटा है। उनके कांटे पर, उन्होंने एक नई शाखा "फू" बनाई है और कुछ बदलाव किए हैं। मैं अपने "फू" को एक नई शाखा में कैसे खींचूं जिसका नाम "फू" भी है?

मुझे लगता है कि वे मेरे लिए एक पुल अनुरोध प्रस्तुत कर सकते हैं, लेकिन मैं खुद इस प्रक्रिया को शुरू करना चाहूंगा।

निम्नलिखित मान लें:

  1. क्योंकि उन्होंने मेरी परियोजना को रोक दिया, हमारे दोनों रिपॉजिट समान 'इतिहास' को साझा करते हैं
  2. हालाँकि GitHub से पता चलता है कि उनका प्रोजेक्ट खान से लिया गया था, लेकिन मेरे स्थानीय भंडार के पास इस व्यक्ति की परियोजना का कोई संदर्भ नहीं है। क्या मुझे रिमोट के रूप में उन्हें जोड़ने की आवश्यकता है?
  3. मेरे पास अभी तक "फू" नामक एक शाखा नहीं है - मुझे नहीं पता कि क्या मुझे पहले इसे मैन्युअल रूप से बनाने की आवश्यकता है।
  4. मैं निश्चित रूप से यह एक अलग शाखा में खींचना चाहता हूं और मेरे गुरु नहीं।

जवाबों:


349
git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo

यह एक स्थानीय शाखा को स्थापित करेगा foo, दूरस्थ शाखा को ट्रैक करेगा coworker/foo। इसलिए जब आपके सहकर्मी ने कुछ बदलाव किए हैं, तो आप उन्हें आसानी से खींच सकते हैं:

git checkout foo
git pull

टिप्पणियों का जवाब:

कूल :) और अगर मैं उस शाखा में अपना परिवर्तन करना चाहूंगा, तो क्या मुझे "फू" से दूसरी स्थानीय शाखा "बार" बनानी चाहिए और सीधे अपने "फू" पर काम करना चाहिए?

आपको एक नई शाखा बनाने की आवश्यकता नहीं है, भले ही मैं इसकी सलाह दूं। आप सीधे भी कर सकते हैं fooऔर अपने सहकर्मी को अपनी शाखा खींच सकते हैं। लेकिन वह शाखा पहले से मौजूद है और आपकी शाखा fooको एक अपस्ट्रीम शाखा के रूप में सेटअप करने की आवश्यकता है:

git branch --set-upstream foo colin/foo

यह मानते हुए colinकि आपकी रिपॉजिटरी (आपके सह-कार्यकर्ता रिपॉजिटरी के लिए एक दूरस्थ) समान तरीके से परिभाषित है:

git remote add colin git://path/to/colins/repo.git

3
यह बहुत तेज़ था :) आप यह जोड़ना चाह सकते हैं कि उसे git://दूसरे व्यक्ति के GitHub रिपॉजिटरी पेज से URL का उपयोग करना चाहिए //path/to/coworkers/repo.git। (यह बताते हुए कि मेरे उत्तर ने क्या धीमा कर दिया था;)
मार्क लॉन्गेयर

कूल :) और अगर मैं उस शाखा में अपना परिवर्तन करना चाहूंगा, तो क्या मुझे "फू" से दूसरी स्थानीय शाखा "बार" बनानी चाहिए और सीधे अपने "फू" पर काम करना चाहिए?
कॉलिन ओ'डेल

या क्या मेरे "फू" में सीधे काम करना और बाद में उसके परिवर्तनों को मर्ज करना सुरक्षित है? यहाँ सबसे अच्छा अभ्यास कौन सा है?
कॉलिन ओ'डेल

1
बिल्कुल, यह वही है जो मैं देख रहा था :) आपकी मदद के लिए धन्यवाद !!
कॉलिन ओ'डेल

1
3 मिनट में अच्छा जवाब!
तीये की

103

नहीं, आपको उन्हें रिमोट के रूप में जोड़ने की आवश्यकता नहीं है। यह हर बार करने के लिए बोझिल और एक दर्द होगा।

उनके आवागमन को हथियाना:

git fetch git@github.com:theirusername/reponame.git theirbranch:ournameforbranch

यह एक स्थानीय शाखा बनाता है जिसका नाम ournameforbranchवही है जो theirbranchउनके लिए था। प्रश्न उदाहरण के लिए, अंतिम तर्क होगा foo:foo

:ournameforbranchयदि आपके नाम की अपनी किसी शाखा के साथ कोई विवाद नहीं है तो नोट पार्ट को आगे छोड़ दिया जा सकता है। उस स्थिति में, एक संदर्भ FETCH_HEADउपलब्ध है। आप git log FETCH_HEADउनके कमिट्स को देख सकते हैं, फिर cherry-pickedचेरी को अपने कमेंट्स को लाइक करें।

यह उन्हें वापस धक्का:

अक्सर, आप उनकी कुछ चीज़ों को ठीक करना चाहते हैं और उसे ठीक पीछे धकेलना चाहते हैं । यह भी संभव है:

git fetch git@github.com:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD

# fix fix fix

git push git@github.com:theirusername/reponame.git HEAD:theirbranch

में काम कर रहे हैं अलग राज्य आप चिंता, हर तरह से एक शाखा का उपयोग कर बनाने :ournameforbranchऔर की जगह FETCH_HEADऔर HEADके साथ ऊपर ournameforbranch


2
इसके लिए धन्यवाद, अन्य उत्तर काम नहीं करता है यदि आप और अन्य व्यक्ति दोनों ने पहचान की शाखाओं (डिफ़ॉल्ट masterशाखा की तरह ) का नाम दिया है
अय्यूब

2
यह ध्यान देने योग्य है कि यदि आपके पास अपने github खाते से जुड़ी SSH कुंजी जैसी सामग्री नहीं है तो यह विधि काम नहीं करेगी, देखें stackoverflow.com/questions/12940626
Przemek D

क्या आपको एक सहयोगी के रूप में नहीं जोड़ा जाना है ताकि आप उनके रेपो को आगे बढ़ा सकें?
हनी

@ निश्चित रूप से! पुश करने पर आपको लगता है कि रिमोट एंड पर पुश करने के लिए आपके पास आवश्यक अनुमतियां हैं। इसी तरह से पथ ग्रहण करना सुलभ है।
१17:१27 को

यदि आप git branch -m newbranchइस अलग अवस्था में रहते हैं, तो अपना दिमाग खो देंगे और यह कहना शुरू कर देंगे कि आपका रेपो अब मान्य नहीं है। git initइसे ठीक करने के लिए लगता है और आपको "newbranch" नाम की शाखा के साथ कम से कम उस स्थिति में वापस रख दिया गया है जिससे आप पहले थे।
इयान हिकसन

14

अगर एंटक का जवाब:

git fetch git@github.com:<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH> 

आपको देता है:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

तब (Przemek D की सलाह के बाद) का उपयोग करें

git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>

6

निम्नलिखित एक अच्छा समीचीन समाधान है जो किसी अन्य उपयोगकर्ता के कांटे से पीआर शाखा की जांच के लिए गीथहब के साथ काम करता है। आपको पुल अनुरोध आईडी (जो PR शीर्षक के साथ GitHub प्रदर्शित करता है) को जानना होगा।

उदाहरण:

अपने असुरक्षित कोड फिक्सिंग # 8
ऐलिस विलय करने के लिए 1 में प्रतिबद्ध चाहता है your_repo:masterसेher_repo:branch

git checkout -b <branch>
git pull origin pull/8/head

यदि आपके रिमोट से अलग है origin। सही पुल अनुरोध आईडी के साथ
स्थानापन्न 8


2
इसके लिए अधिक उर्जा चाहिए। pe3rfectly काम करता है और "घातक: दूरस्थ रेफरी नहीं मिल सका" त्रुटि से बचने के लिए मैं शीर्ष-मतदान जवाब के साथ मिल रहा था। धन्यवाद!
18 रोम में माइकल रोमरेल

आसान कोड की 2 लाइनें। इसे साझा करने के लिए धन्यवाद! इससे भी मीठी बात यह है कि अपडेट को एक आसान तरीके से अपने पुल अनुरोध में वापस मर्ज कर रहा है।
क्लेविस

4

GitHub के पास पूर्ववर्ती उत्तरों के सापेक्ष एक नया विकल्प है, बस PR से कमांड लाइनों को कॉपी / पेस्ट करें:

  1. पीआर बटन के नीचे Mergeया Squash and mergeबटन को देखने के लिए स्क्रॉल करें
  2. दाईं ओर दिए गए लिंक पर क्लिक करें: view command line instructions
  3. स्टेप 1 के दाईं ओर कॉपी आइकन दबाएँ
  4. अपने टर्मिनल में कमांड चिपकाएँ

2

यदि कांटा हुआ रेपो संरक्षित है, तो आप सीधे इसमें धकेल नहीं सकते हैं, और आपका लक्ष्य उनके फू में बदलाव करना है, तो आपको उनकी शाखा को अपने रेपो में प्राप्त करने की आवश्यकता है:

git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo 
git checkout --no-track protected_repo/foo

अब आपके पास foo की एक स्थानीय प्रति है, जिसके साथ कोई अपस्ट्रीम नहीं जुड़ा है। आप इसमें परिवर्तन कर सकते हैं (या नहीं) और फिर अपने फू को अपने रिमोट रेपो में धकेल दें।

git push --set-upstream origin foo

अब fit GitHub पर आपके रेपो में है और आपका स्थानीय foo इसे ट्रैक कर रहा है। यदि वे फू करने के लिए परिवर्तन करना जारी रखते हैं, तो आप उनका प्राप्त कर सकते हैं और अपने फू में विलय कर सकते हैं।

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