2011-04-21 8 views
148

मैं सोच रहा हूं कि एक स्थानीय शाखा को एक अलग शाखा के साथ एक अलग नाम के साथ धक्का और खींचने का एक आसान तरीका है, बिना किसी नाम के हमेशा निर्दिष्ट किए।मैं स्थानीय गिट शाखा को रिमोट पर आसानी से एक अलग नाम से कैसे दबा सकता हूं?

उदाहरण के लिए:

$ git clone myrepo.git 
$ git checkout -b newb 
$ ... 
$ git commit -m "Some change" 
$ git push origin newb:remote_branch_name 

अब अगर किसी को remote_branch_name अपडेट हो जाता है, मैं कर सकते हैं:

$ git pull 

और सब कुछ मिला दिया गया/तेजी से भेजा जाता है। हालांकि, अगर मैं अपने स्थानीय "newb" में परिवर्तन करते हैं, मैं नहीं कर सकता:

% git push origin newb:remote_branch_name 

एक छोटे से मूर्खतापूर्ण लगता है:

$ git push 

इसके बजाय, मैं करने के लिए है। यदि git-pullgit-config branch.newb.merge का उपयोग यह निर्धारित करने के लिए करता है कि कहां से खींचना है, git-push क्यों एक समान कॉन्फ़िगरेशन विकल्प नहीं हो सकता है? क्या इसके लिए कोई अच्छा शॉर्टकट है या क्या मुझे अभी तक लंबा रास्ता तय करना चाहिए?

+5

'Git धक्का मूल स्थानीय नाम: रिमोट name' इस cmd मेरे लिए काम किया। –

उत्तर

83

निश्चित रूप से। बस बल्कि नाम पर मिलान वालों के लिए शाखाओं धक्का (जो push.default, matching के लिए डिफ़ॉल्ट सेटिंग है) की तुलना में उनके upstreams (जो एक ही है कि pull से खींच जाएगा, branch.newb.merge द्वारा परिभाषित) के लिए शाखाओं पुश करने के लिए, upstream करने के लिए अपने push.default निर्धारित किया है।

git config push.default upstream 

ध्यान दें कि यह प्रयोग किया जाता tracking Git 1.7.4.2 से पहले नहीं upstream के नाम से जाना, इसलिए यदि आप Git के एक पुराने संस्करण का उपयोग कर रहे tracking बजाय का उपयोग करें। push.default विकल्प गिट 1.6.4 में जोड़ा गया था, इसलिए यदि आप उससे पुराने संस्करण पर हैं, तो आपके पास यह विकल्प बिल्कुल नहीं होगा और उसे शाखा को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता होगी।

+0

वह था! यह उन सभी शाखाओं पर लागू होता है जो ट्रैकिंग कर रहे हैं, लेकिन यह ठीक है। धन्यवाद! – jmacdonagh

+0

मुझे यह जानने में दिलचस्पी होगी कि मैंने जिस शाखा नाम की जांच की है, उसके लिए कोई शॉर्टेंड है या नहीं। मैं सिर्फ 'पुश बिल्डर्स को गिट करना चाहता हूं।: Test_this' जहां '.' स्थानीय शाखा नाम होगा जिसे मैं जरूरी नहीं जानता हूं। मैं इसे देख सकता था, यकीन है, लेकिन यदि कोई छोटा हाथ था, तो डॉट की तरह, उसके लिए, यह अच्छा होगा। –

+1

@FrederickNord 'HEAD' वह शॉर्टेंड है जिसे आप ढूंढ रहे हैं। 'हेड' वर्तमान में चेक की गई शाखा के लिए क्या बिंदु है, या यदि आपके पास एक अलग सिर है तो सीधे किसी विशेष प्रतिबद्धता के लिए। –

145

जब आप प्रारंभिक धक्का जोड़ने the -u parameter कार्य करें:

git push -u origin my_branch:remote_branch 

बाद धक्का जाना होगा, जहां आप चाहते हैं।

संपादित करें:

टिप्पणी के अनुसार, यह है कि केवल ऊपर पुल सेट।

git branch --set-upstream 

इसे करना चाहिए।

+4

'-u' बस अपस्ट्रीम सेट करता है, जो कि प्रश्न के अनुसार, पहले से सेट है। अपस्ट्रीम सेटिंग का सम्मान करने के लिए उसे 'push' प्राप्त करने के लिए 'push.default'' upstrem' सेट करने की आवश्यकता है, क्योंकि डिफ़ॉल्ट रूप से केवल 'पुल' करता है। –

+1

यह काम नहीं प्रतीत होता है - कम से कम गिट –

11

Adam द्वारा आदेश अब बहिष्कृत किया गया है। आप उपयोग कर सकते हैं:

git branch --set-upstream-to origin/my_remote_branch my_local_branch 

origin/my_remote_branch को my_local_branch की नदी के ऊपर शाखा स्थापित करने के लिए।

+4

के संस्करणों पर नहीं, क्या आप जो जानकारी साझा करते हैं, उसका समर्थन करने वाला एक लिंक प्रदान कर सकते हैं -u को बहिष्कृत किया जा रहा है? [Git-scm.com] पर पुश के संबंध में नवीनतम संस्करण के लिए डॉक्स (https://git-scm.com/docs/git-push) यह सुझाव देता है कि यह वर्तमान है। अग्रिम धन्यवाद - पाठकों को अधिक जानकारी के लिए अनुवर्ती होना बहुत उपयोगी हो सकता है। –

0

यहां प्रक्रिया है जो मेरे लिए काम कर चुकी है।

git clone original-repo-url 
git remote rename origin upstream 
git remote add origin new-repo-url 

अब आपका नया रेपो 'मूल' होगा और मूल रेपो 'अपस्ट्रीम' होगा। गिट रिमोट-वी चलाकर इसकी पुष्टि करें।(साइड नोट: अपस्ट्रीम का उपयोग मूल रेपो से प्राप्त करने के लिए किया जाता है - ताकि आप अपनी स्थानीय प्रति को उस परियोजना के साथ समन्वयित कर सकें जिसमें आप योगदान करना चाहते हैं - और उत्पत्ति को खींचने और धक्का देने के लिए उपयोग किया जाता है क्योंकि आप अपने खुद के रेपो में योगदान दे सकते हैं)।

git push origin master

अब अपने नए दूरस्थ रेपो के मास्टर (Github पर) में-सिंक मूल गुरु के साथ हो जाएगा, लेकिन यह सुविधा शाखाओं में से किसी के लिए नहीं होगा।

git rebase upstream/branch-name 
git push origin master 

रीबेस एक स्मार्ट विलय है। फिर फिर से मास्टर करने के लिए धक्का दें और आप चयनित रेपो शाखा को नए रेपो पर मास्टर के रूप में देखेंगे।

वैकल्पिक:

git remote rm upstream 
git remote add upstream new-repo-url 
संबंधित मुद्दे