मैं आसानी से एक अलग नाम के साथ एक स्थानीय गिट शाखा को रिमोट से कैसे धकेल सकता हूं?


175

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

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

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

अब अगर कोई रिमोट_ब्रांच_नाम अपडेट करता है, तो मैं कर सकता हूं:

$ git pull

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

$ git push

इसके बजाय, मुझे करना होगा:

% git push origin newb:remote_branch_name

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

जवाबों:


93

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

git config push.default upstream

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


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

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

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

धन्यवाद! इसने Updates were rejected because a pushed branch tip is behind its remoteमेरे लिए त्रुटि तय की । मेरा स्थानीय रेपो आज तक था, लेकिन नाम सिर्फ अलग थे।
कान्हाबिट्स

171

जब आप प्रारंभिक धक्का -u पैरामीटर जोड़ते हैं :

git push -u origin my_branch:remote_branch

इसके बाद पुशअप्स आप जहां चाहें जाएंगे।

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

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

git branch --set-upstream

करना चाहिए।


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

2
यह काम करने के लिए प्रतीत नहीं होता है - कम से कम कभी भी गिट के संस्करणों पर नहीं
थॉमस वाटसन

git ब्रांच --सेट-अपस्ट्रीम केवल पुल सेटअप करता है "pushRemote" को इसके बाद सेट करने की आवश्यकता है।
व्हेरेडिड्टनामेकोमॉर्फोम

मुझे नहीं लगता git branch --set-upstreamकि आवश्यक है। नोट: मेरी git --version२.१17.१ है।
गैब्रियल स्टेपल्स

15

एडम द्वारा आदेश अब हटा दिया गया है। आप उपयोग कर सकते हैं:

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

के अपस्ट्रीम शाखा को सेट करने के my_local_branchलिए origin/my_remote_branch


6
क्या आप अपने द्वारा साझा की जा रही जानकारी का समर्थन करने वाला एक लिंक प्रदान कर सकते हैं -जिसमें पदावनत किया जा रहा है? Git-scm.com पर पुश के संबंध में नवीनतम संस्करण के लिए दस्तावेज़ यह वर्तमान है। अग्रिम धन्यवाद - अधिक जानकारी के लिए फॉलो करना पाठकों के लिए बहुत उपयोगी हो सकता है।
काय वी।

@KayV से सहमत हों, विशेषकर यह कि मुझे यह संदेश तब मिला जब मैं अपनी स्थानीय शाखा के नाम के साथ एक नई दूरस्थ शाखा बनाने की कोशिश कर रहा था: 'यदि आप एक नई स्थानीय शाखा को आगे बढ़ाने की योजना बना रहे हैं जो अपने दूरस्थ समकक्ष को ट्रैक करेगी, तो आप चाहें। "पुश पुश -u" का उपयोग करने के लिए अपस्ट्रीम कॉन्फिगरेशन सेट करें जैसा कि आप पुश करते हैं। '
एफबीबी

0

यहाँ प्रक्रिया है कि मेरे लिए काम किया है।

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

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

git push origin master

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

git rebase upstream/branch-name
git push origin master

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

वैकल्पिक:

git remote rm upstream
git remote add upstream new-repo-url

0

मैं काफी समय से इसी मुद्दे पर चल रहा हूं। अंत में मेरे पास बयानों का एक सेट है, इसलिए मुझे git push origin local:remoteहर बार नहीं करना है । मैंने इनका अनुसरण किया:

git branch --set-upstream-to origin/remote_branch_name
git config push.default upstream
git push

अलग नाम (पहली पंक्ति) के साथ एक दूरस्थ शाखा में अपस्ट्रीम स्थापित करने और फिर उस अपस्ट्रीम को डिफ़ॉल्ट (दूसरी पंक्ति) के रूप में बनाने के बाद, तीसरी पंक्ति अब इन नियमों का पालन करेगी और सेट अपस्ट्रीम पर धक्का देगी।

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