git push local branch ที่มีชื่อเดียวกับ remote tag


111

ฉันกำลังพยายามผลักดันสาขาในพื้นที่ใหม่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.1product-0.1

บางคนแก้ไขปัญหานี้โดยการลบแท็กที่ขัดแย้งกันในเครื่องจากนั้นกดสาขาจากนั้นดึงแท็กระยะไกล แต่ดูเหมือนจะยุ่งยากและเกิดข้อผิดพลาดได้ง่าย

ฉันจะสร้างสาขาโดยไม่ยุ่งยากได้อย่างไร

ขอบคุณสำหรับข้อมูลของคุณ


1
ลองrefs/heads/product-0.2:refs/heads/product-0.2เช่นไม่มีเครื่องหมายทับนำหน้าและให้ refspec แบบเต็มในด้านท้องถิ่น
knittl

สามารถลอง git push origin product-0.2: product-0.2
vpatil

คำตอบ:


163

คำสั่งต่อไปนี้ควรใช้งานได้

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

16
คำตอบที่ได้รับการยอมรับนี่คือวิธีที่จะทำให้เข้าใจผิด ถึงกระนั้นมันก็ง่ายกว่าที่จะไม่ต้องมีแท็กและสาขาที่มีชื่อเดียวกันตั้งแต่แรก เครื่องมือบางอย่าง (เช่น SourceTree) จะสะดุดและคุณจะถูกปล่อยให้อยู่ในอุปกรณ์ของคุณเองโดยมีบรรทัดคำสั่งเป็นทางออกเดียว ขอบคุณทุกคน!
youri

2
+1. สิ่งที่คล้ายกันใช้งานได้เมื่อคุณต้องการแยกแยะชื่อระยะไกล:refs/remotes/remote_name/remote_branch
Kelvin

1
ได้ตั้งชื่อรุ่นที่ติดแท็กโดยไม่รู้ตัวmasterและไม่สามารถส่งไปยังสาขาที่มีชื่อเดียวกันได้อีกต่อไป git push origin refs/heads/masterทำเคล็ดลับ (จากนั้นฉันก็ลบแท็กนั้นเพื่อให้มันหยุดเกิดขึ้น)
tresf

นอกเหนือจากแนวทางปฏิบัติที่ดีที่สุดแล้วคุณยังไม่สามารถผลักดันสาขาที่คุณพยายามผลักดันให้เป็นสาขาเริ่มต้นได้ .. เราจะแก้ไขได้อย่างไร
Baksteen

1
หากวิธีแก้ปัญหาข้างต้นไม่ได้ผลโปรดดำเนินการหลังจากถอดหัวรีโมทแล้ว git push origin - ลบการอ้างอิง / หัว / BRANCHNAME
เดียว

42

ตรวจสอบว่าแท็กใดที่เกี่ยวข้องกับสาขาของคุณ:

git tag

ในกรณีของฉันฉันมีแท็กที่มีชื่อสาขาเดียวกัน การลบมันใช้งานได้:

git tag -d [tag-name]

1
ทำงานได้ดีมีแท็กชื่อเดียวกับสาขาของฉัน
ChanceVI

20

เปลี่ยนชื่อ

ไม่ว่าคุณจะทำในพื้นที่หรือจากระยะไกลเพียงแค่เปลี่ยนชื่อ

โดยพื้นฐานแล้วแท็กและสาขาเป็นสิ่งเดียวกันในคอมไพล์: เป็นตัวแทนของตัวชี้ไปยังคอมมิต ความแตกต่างคือตัวชี้สาขาจะเลื่อนไปตามที่คุณทำการคอมมิตในขณะที่แท็กยังคงนิ่ง

อย่างไรก็ตามคุณสามารถดำเนินการได้git checkoutทั้งในสาขาหรือแท็ก ทำไมคุณถึงต้องต่อสู้กับชื่อที่เพิ่มขึ้นสองเท่าเหล่านี้? เปลี่ยนพวกเขา


ควร / สามารถเรียกแท็กproduct-0.2.0ด้วยตัวเลขหลักสุดท้ายสำหรับ 'ระดับการแก้ไข' แต่ถึงกระนั้นเราก็มีหลักการตั้งชื่อและเราไม่ประสบปัญหาในอดีตเมื่อสาขาถูกสร้างขึ้นก่อนแท็ก
youri

หากทีมเริ่มใช้สาขาแล้วจะไม่สามารถเปลี่ยนชื่อได้หรือไม่?
svassr

เปลี่ยนชื่อของเอนทิตีที่คุณยังไม่ได้พุช
TheBuzzSaw

คุณแน่ใจเกี่ยวกับ @ TheBuzzSaw นี้หรือไม่? เพราะในพื้นที่ฉันสามารถมีทั้งสองชื่อเดียวกันเป็นคนละอย่างกัน
John John Pichler

1
ในขณะที่คำสั่ง (ตามคำตอบที่เลือก) ข้างต้นอาจช่วยแก้ปัญหาได้ - เป็นคนใหม่สำหรับคอมไพล์ฉันไม่เข้าใจคำถามหรือคำตอบ คำตอบนี้อย่างน้อยก็ให้ a) คำแนะนำและ b) คำอธิบาย - แม้แต่คำแนะนำสำหรับอนาคต ฉันคิดจะถามคำถามของตัวเอง แต่ฉันเบื่อกับความคิดเห็นเช่นเคยถามมาแล้ว - imho: คำถามที่ไม่เข้าใจไม่เหมือนกับคำถามเริ่มต้น แต่นั่นคือชีวิต)
Michael Felt

15

หากคุณพยายามพุชแท็กที่มีชื่อสาขาเดียวกัน:

git push origin tag myTag

3
ทำได้ดีมากครับ! นี่ควรเป็นคำตอบที่ยอมรับได้ อ่านคำตอบ SO หางยาวเสมอ
louis_guitton

เป็นประโยชน์ที่จะรู้ แต่ไม่ตอบคำถามเลย ฉันจะไม่ลงคะแนนเนื่องจากผู้เขียนเน้นย้ำว่ามันเป็นอีกทางหนึ่ง แต่แทบจะไม่เป็นที่ยอมรับในฐานะคำตอบ
Peter Halverson

12

เมื่อเช้านี้ฉันพยายามส่งไปยังที่เก็บ Canonical และได้รับข้อผิดพลาดต่อไปนี้:

$ 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. ตรวจสอบให้แน่ใจว่าคุณได้เลือก "ลบแท็กจากระยะไกล" แล้วคลิกตกลง

ลองอีกครั้งเพื่อผลักดันการเปลี่ยนแปลงของคุณ ตอนนี้จะได้ผล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.