git पुश स्थानीय शाखा को रिमोट टैग के समान नाम के साथ


110

मैं एक नई स्थानीय शाखा product-0.2को दूरस्थ में धकेलने का प्रयास कर रहा हूं जहां पहले से ही एक ही नाम वाला एक टैग है (लेकिन शाखा स्वयं मौजूद नहीं है)

git push -v --tags --set-upstream origin product-0.2:product-0.2 
Pushing to https://****@github.com/mycompany/product.git
error: src refspec product-0.2 matches more than one.
error: failed to push some refs to 'https://****@github.com/mycompany/product.git'

के जैसा:

git push origin product-0.2:/refs/heads/product-0.2 

यद्यपि इसके चारों ओर का दूसरा तरीका काम करता है, उदाहरण के लिए, एक शाखा बनाएं product-0.1, इस पर फिर एक टैग लागू करें product-0.1

कुछ लोग स्थानीय रूप से परस्पर विरोधी टैग को हटाकर इसके चारों ओर काम करते हैं, फिर शाखा को धक्का देते हैं, फिर रिमोट टैग को पुनः प्राप्त करते हैं, लेकिन यह बोझिल और त्रुटि प्रवण लगता है।

मैं कम से कम उपद्रव के साथ अपनी शाखा कैसे बना सकता हूं?

आपके सहयोग के लिए धन्यवाद


1
कोशिश करो refs/heads/product-0.2:refs/heads/product-0.2, यानी प्रमुख स्लैश के बिना, और स्थानीय पक्ष पर पूरी तरह से वापसी भी दे।
नाइट

कोशिश कर सकते हैं git पुश ओरिजिन प्रोडक्ट-0.2: प्रोडक्ट-0.2
vpatil

जवाबों:


162

निम्नलिखित कमांड काम करना चाहिए।

git push origin refs/heads/product-0.2:refs/heads/product-0.2 

16
स्वीकृत उत्तर, यह अस्वीकार करने का तरीका है। फिर भी, पहली जगह में एक ही नाम के साथ टैग और शाखाएं नहीं होना आसान है। कुछ उपकरण (जैसे SourceTree) उस पर ठोकर खाएंगे और आपको एकमात्र समाधान के रूप में कमांड लाइन के साथ अपने स्वयं के उपकरणों पर छोड़ दिया जाएगा। आप लोगों को धन्यवाद!
Youri

2
+1। इसी तरह की बात तब काम करती है जब आपको दूरस्थ नामों की अवहेलना करनी होती है:refs/remotes/remote_name/remote_branch
केल्विन

1
अनजाने में एक टैग रिलीज़ को नाम दिया गया था masterऔर अब उसी नाम के साथ शाखा को धक्का नहीं दे सकता था। git push origin refs/heads/masterचाल चली (फिर मैंने उस टैग को हटा दिया ताकि ऐसा होना बंद हो जाए)।
tresf

सर्वोत्तम प्रथाओं के अलावा, आप अभी भी उस शाखा को धकेलने में असमर्थ होंगे, जिसे आप धकेलने की कोशिश कर रहे हैं कि वह डिफ़ॉल्ट शाखा है .. हम उसके आसपास कैसे काम कर सकते हैं?
बैक्स्टीन

यदि उपरोक्त समाधान काम नहीं करता है, तो कृपया इसे दूर के सिर को हटाने के बाद करें। git push Origin --delete refs / heads / BRANCHNAME
alones

42

सत्यापित करें कि आपकी शाखा से कौन से टैग जुड़े हुए हैं:

git tag

मेरे मामले में, मेरे पास शाखा का एक ही नाम वाला एक टैग था। इसे हटाने का काम किया:

git tag -d [tag-name]

1
ठीक काम किया, मेरी शाखा के समान नाम वाला एक टैग था।
चांसवी

20

नाम बदलो।

चाहे आप इसे स्थानीय रूप से करें या दूरस्थ रूप से, बस नाम बदलें।

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

हालाँकि , आप git checkoutकिसी शाखा या टैग पर प्रदर्शन कर सकते हैं । आप इन सभी नामों के साथ क्यों लड़ेंगे? उन्हें बदलो।


टैग product-0.2.0को 'पैच लेवल' के लिए अंतिम अंक के साथ टैग कहा जा सकता है , लेकिन फिर भी, हमारे पास जगह में नामकरण सम्मेलन था और टैग से पहले शाखा बनाए जाने पर हम अतीत में परेशानी में नहीं आए थे।
आपका

यदि टीम ने पहले से ही शाखा का उपयोग करना शुरू कर दिया है तो क्या इसका नाम बदलने के लिए इसे हथियार नहीं बनाया जाएगा?
19

उस इकाई का नाम बदलें जिसे आपने अभी तक नहीं धकेला है।
बज़्ज़ॉ

क्या आप इस @TheBuzzSaw के बारे में निश्चित हैं? क्योंकि स्थानीय रूप से मैं एक ही नाम के साथ दोनों हो सकता है, अलग-अलग चीजों के रूप में।
जॉन जॉन पिचलर

1
हालांकि ऊपर दिए गए आदेश (चयनित उत्तर के रूप में) ने इस प्रश्न को हल कर दिया है - क्योंकि मैं न तो प्रश्न और न ही उत्तर को समझने के लिए नया हूं। यह उत्तर कम से कम एक) सलाह और ख) एक स्पष्टीकरण देता है - यहां तक ​​कि भविष्य के लिए सिफारिश भी। मैंने अपने स्वयं के प्रश्न पूछने पर विचार किया होगा, लेकिन मैं पहले से ही पूछे गए टिप्पणियों की तरह थक गया - इम्हो: एक प्रश्न जो समझ में नहीं आता है वह एक शुरुआती प्रश्न के समान नहीं है। लेकिन यह जीवन है;)
माइकल फेल्ट

15

यदि आप एक टैग को धक्का देने की कोशिश कर रहे हैं जिसमें एक शाखा का नाम है:

git push origin tag myTag

3
अच्छा किया सर! यह स्वीकृत उत्तर होना चाहिए। हमेशा लंबी पूंछ एसओ जवाब पढ़ें
louis_guitton

यह जानना उपयोगी है, लेकिन इस सवाल का जवाब बिल्कुल नहीं है। मैं इसे कम नहीं करूंगा, क्योंकि लेखक इस बात पर जोर देता है कि यह चारों ओर का रास्ता है, लेकिन उत्तर के रूप में शायद ही स्वीकार्य हो।
पीटर हैलवर्स

12

मैं आज सुबह एक विहित भंडार पर धकेलने की कोशिश कर रहा था और निम्नलिखित त्रुटि मिली:

$ git push origin master
error: src refspec master matches more than one.
error: failed to push some refs to 'ssh://user@host/srv/git/repo'

ऐसा इसलिए हुआ क्योंकि मैंने गलती से स्थानीय रूप से मास्टर टैग बना लिया था:

$ git tag
master
tag1
tag2
tag3
tag4

एक बार जब मैंने इस टैग को स्थानीय रूप से हटा दिया:

git tag -d master

मैं फिर से धक्के लगा रहा था।


अच्छे खर्च। स्थानीय टैग को हटाने की आवश्यकता है। धन्यवाद!
शेफ फिरौन

5

यह विफल रहा:

git push $origin $branch:$branch 

जबकि यह मेरे लिए काम किया:

git checkout $branch
git push $origin HEAD:$branch

1

यदि आप स्रोत वृक्ष का उपयोग कर रहे हैं तो निम्न चरणों का पालन करें।

  1. टैग अनुभाग में शाखा का टैग नाम खोजें
  2. टैग नाम हटाएं टैग पर क्लिक करें।
  3. सुनिश्चित करें कि आप "रिमोट से टैग हटाएं" जांचें और ठीक क्लिक करें

अपने परिवर्तनों को आगे बढ़ाने के लिए फिर से प्रयास करें। अब यह काम करेगा।

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