2009-11-10 12 views
404

से एक निश्चित शाखा खींचें मेरे पास कई शाखाओं वाला एक प्रोजेक्ट है। मैं उन्हें GitHub पर धक्का दे रहा हूं, और अब कोई और उन पर काम कर रहा है, मुझे गिटहब से खींचने की ज़रूरत है। यह मास्टर में ठीक काम करता है। लेकिन कहें कि मेरे पास शाखा xyz है। मैं गिटहब से शाखा xyz कैसे खींच सकता हूं और इसे अपने लोकहोस्ट पर शाखा xyz में विलय कर सकता हूं?गिट गिटहब

मैं वास्तव में मेरा उत्तर यहाँ है: Push and pull branches in Git

लेकिन मैं एक त्रुटि और के बारे में "गैर तेजी से आगे" कुछ पाने "[अस्वीकार कर दिया]!"।

कोई सुझाव?

+3

वास्तविक आदेश आप चला रहे हैं क्या है? –

+1

यह लाया जाता है जो 'गैर फास्ट फॉरवर्ड' संदेश से असफल हो सकता है। क्या आपने रिमोट-ट्रैकिंग शाखा (मूल/xyz) को संशोधित किया था, या रिमोट रिपोजिटरी में शाखा रिवाउंड/पुनर्लेखित किया गया था? आपको "गिट फ़ेच मूल --force'" का उपयोग करने की आवश्यकता है, लेकिन कृपया इसे करने से पहले दस्तावेज़ पढ़ें। –

उत्तर

466

लेकिन मैं एक मिल त्रुटि "! [अस्वीकार]" और "गैर फास्ट फॉरवर्ड" के बारे में कुछ

ऐसा इसलिए है क्योंकि गिट शाखाओं से आपके वर्तमान मास्टर में परिवर्तनों को विलय नहीं कर सकता है। मान लीजिए कि आपने शाखा master शाखा की जांच की है, और आप दूरस्थ शाखा other-branch में विलय करना चाहते हैं। जब आप ऐसा करते:

$ git pull origin other-branch 

Git मूल रूप से यह कर रहा है:

$ git fetch origin other-branch && git merge other-branch 

है यही कारण है, एक pull है सिर्फ एक fetch एक merge द्वारा पीछा किया। हालांकि, जब pull -ing, Git केवलother-branchअगर यह एक तेजी से आगे मर्ज कर सकते हैं मर्ज हो जाएंगे।एक फास्ट-फॉरवर्ड मर्ज एक मर्ज है जिसमें आप जिस शाखा का विलय करने की कोशिश कर रहे हैं उसका सिर उस शाखा के प्रमुख के है जो आप विलय करना चाहते हैं। उदाहरण के लिए, अगर आप इस इतिहास पेड़ है, तो विलय other-branch तेजी से आगे मर्ज में परिणाम होगा:

v master 
O-O-O 
\ 
\-O-O-O-O 
     ^other-branch 

:

O-O-O-O-O-O 
^  ^
master other-branch 

हालांकि, इस नहीं तेजी से आगे मर्ज किया जाएगा तब

$ git fetch origin other-branch 

मुझे: अपनी समस्या को हल करने के लिए, पहले लाने दूरदराज के शाखा अपने वर्तमान शाखा में यह rge (मुझे लगता है कि master है मान लेंगे), और किसी भी विलय के विरोध को ठीक:

$ git merge origin/other-branch 
# Fix merge conflicts, if they occur 
# Add merge conflict fixes 
$ git commit # And commit the merge! 
+0

नहीं, समस्या लाने के साथ समस्या है, मर्ज चरण के साथ नहीं। –

+2

आम तौर पर, रिमोट्स सेट अप किए जाते हैं जैसे कि फ़ेचर्स को मजबूर किया जाता है, भले ही वे फास्ट-फ़ॉरवर्ड प्रतिबद्ध न हों, इसलिए यह तब तक नहीं होना चाहिए जब तक ओपी ने सामान्य कॉन्फ़िगरेशन के साथ कुछ नहीं बदला। फास्ट-फॉरवर्ड समस्या fetch * या * विलय के दौरान हो सकती है। आप क्या कहते हैं कि समस्या निश्चित रूप से लाने में है, और विलय में नहीं? – mipadi

+0

मैं इन चरणों का पालन करता हूं (fetch, विलय)। गिट मुझे बताता है कि ऐसा करने के लिए कुछ भी नहीं है। जब मैं प्रतिबद्ध करने की कोशिश करता हूं, तो यह तेजी से आगे के बारे में चिल्लाना पड़ता है। –

27

मुझे यकीन है कि नहीं मैं पूरी तरह से इस समस्या को समझने हूँ, लेकिन एक मौजूदा शाखा खींच इस तरह से किया जाता है (कम से कम यह मेरे लिए काम करता :)

git pull origin BRANCH 

यह मानते हुए किया जाता है कि अपने स्थानीय शाखा के बंद बनाई गई है मूल/शाखा।

88

आप निम्न शाखाओं के साथ एक शाखा को शाखा में खींच सकते हैं।

git pull {repo} {remotebranchname}:{localbranchname} 

git pull origin xyz:xyz 

आप भी पहले चेकआउट सकता है आप मास्टर शाखा पर कर रहे हैं की तरह एक शाखा:

git checkout -b xyz 

यह एक नई शाखा, "xyz", गुरु से पैदा करता है और सीधे इसे बाहर की जाँच करता है।

तो फिर तुम कार्य करें:

git pull origin xyz 

यह अपने स्थानीय xyz शाखा में नई शाखा खींचती है।

+0

बिल्कुल सही! मुझे बस इतना नहीं पता था कि सिंटैक्स: गिट पुल {repo} {remotebranchname}: {localbranchname}। प्रश्न, अगर वह पुल काम नहीं करता है (शायद किसी ने शाखा को अपडेट किया है और विलय विवाद होगा) मेरे विकल्प क्या हैं? – Costa

+6

मैं इसे कम कर रहा हूं क्योंकि यह दूरस्थ शाखा को आपकी वर्तमान शाखा (उदा। मास्टर) में विलय करने का प्रयास करता है। ऐसा नहीं है कि ज्यादातर लोग क्या करना चाहते हैं, और यही वह नहीं है जिसे ओपी ने पूछा था। @ मोहित द्वारा जवाब सही विकल्प है। – Phrogz

+0

फ़्रोज़ज़ - ऐसा लगता है कि गिट के हाल के संस्करणों में इस व्यवहार को बदल दिया गया है। मैंने पहले इसका इस्तेमाल किया और यह पूरी तरह से अच्छी तरह से काम किया। – Pawan

241

बस अपने दूरस्थ शाखाओं स्पष्ट रूप से ट्रैक और एक सरल git pull तुम सिर्फ क्या चाहते हो जाएगा:

git branch -f remote_branch_name origin/remote_branch_name 
git checkout remote_branch_name 

या और भी अधिक फिटिंग GitHub documentation on forking साथ में:

git branch -f new_local_branch_name upstream/remote_branch_name 
+0

जब आप करते हैं: ** गिट चेकआउट दूरस्थ_ब्रैंच नाम **, क्या यह एक स्थानीय ऑपरेशन है? – berto77

+28

यदि आपको 'वैध ऑब्जेक्ट नाम नहीं है:' मूल/remote_branch_name ', पहले' git fetch origin 'करें। –

+0

@ berto77 हाँ, यह है। – dbliss

65

सबसे अच्छा तरीका है:

git checkout -b <new_branch> <remote repo name>/<new_branch> 
25

git fetch शाखाओं की नवीनतम सूची प्राप्त होंगे।

अब आप git checkout MyNewBranch

हो गया कर सकते हैं :)


के लिए और अधिक जानकारी के दस्तावेज़ देख सकेंगे: git fetch

5

यह अन्य में विलय से पहले दूरस्थ शाखा पाने के लिए मदद की मुझे:

git fetch repo xyz:xyz 
git checkout xyz 
1

आप भी ऐसा कर सकते हैं

git pull -r origin master 

ठीक विलय के विरोध करता है, तो किसी भी

git rebase --continue 

-r रिबेस के लिए है। यह यह एक क्लीनर इतिहास को बढ़ावा मिलेगा

 v master  
o-o-o-o-o-o-o-o 
      ^other branch 

को

 v master  
o-o-o-o-o 
    \o-o-o 
     ^other branch 

से आप शाखा संरचना कर देगा। नोट: यदि आप पहले से ही अपनी दूसरी शाखा को मूल (या किसी अन्य रिमोट) पर धकेल चुके हैं, तो आपको रीबेज के बाद अपनी शाखा को धक्का देना पड़ सकता है।

git push -f origin other-branch 
0
git pull <gitreponame> <branchname> 

आमतौर पर यदि आप केवल अपने कोड करने के लिए सौंपा रेपो है तो gitreponame मूल होगा।

यदि आप दो रेपो की तरह काम कर रहे हैं तो स्थानीय है और दूसरा रिमोट के लिए है जैसे आप गीट रिमोट -v से रेपो की सूची देख सकते हैं। इससे पता चलता है कि आपके वर्तमान कोड में कितने रेपो आवंटित किए गए हैं।

शाखा नाम संबंधित gitreponame में मौजूद होना चाहिए।

आप जोड़ने या निकालने का दो आदेशों निम्नलिखित का उपयोग कर सकते रेपो के

git remote add <gitreponame> <repourl> 
git remote remove <gitreponame>