“ การอัปเดตถูกปฏิเสธเนื่องจากมีแท็กอยู่แล้ว” เมื่อพยายามพุชใน SourceTree


119

เมื่อพยายามพุชผ่าน Source Tree ฉันได้รับข้อผิดพลาดต่อไปนี้:

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags origin refs/heads/master:refs/heads/master 
Pushing to https://user@github.com/repo.git
To https://user@github.com/repo.git
 = [up to date]      master -> master
...
 ! [rejected]        example_tag -> example_tag (already exists)
updating local tracking ref 'refs/remotes/origin/master'
error: failed to push some refs to 'https://user@github.com/repo.git'
hint: Updates were rejected because the tag already exists in the remote.
Completed with errors, see above

ฉันไม่ได้ทำการเปลี่ยนแปลงใด ๆ กับแท็กนี้เท่าที่ฉันรู้ ฉันจะแก้ไขปัญหานี้ได้อย่างไร?

คำตอบ:


230

คุณควรจะแก้ได้ใน git bash (คลิกที่ปุ่ม "Terminal" ใน Source Tree UI) ประเภท:

git pull --tags

3
ฉันรู้สึกว่านี่เป็นคำตอบที่ดีที่สุดสำหรับเส้นทางแห่งการต่อต้านน้อยที่สุด
ชาด

40
ด้วยความขัดแย้งคุณสามารถทำได้git pull --tags -fเพื่อเขียนทับสิ่งที่คุณมีในเครื่องหากนั่นคือสิ่งที่คุณต้องการ
DenLilleMand

2
ใน SourceTree ให้คลิกดึงข้อมูลและเปิดใช้งาน "ดึงแท็กทั้งหมด" ที่จะทำมัน
darkgaze

118

หากคุณไม่ได้ทำการเปลี่ยนแปลงในเครื่องใด ๆ กับแท็กที่คุณต้องการเก็บไว้คุณสามารถลบแท็กที่ถูกปฏิเสธเนื่องจากมีอยู่แล้ว ( example_tagในกรณีนี้):

  1. คลิกขวาที่แท็กแล้วเลือกลบ (อย่าลืมยกเลิกการเลือกช่องทำเครื่องหมายลบแท็กจากรีโมททั้งหมด )
  2. เลือกตัวเลือกการดึงข้อมูล ( ไม่จำเป็นต้องเปิดใช้งานดึงข้อมูลและจัดเก็บแท็กทั้งหมดในเครื่อง)
  3. ตอนนี้คุณควรมีแท็กที่เพิ่งลบกลับไปและการพยายามพุชจะไม่แสดงข้อความแสดงข้อผิดพลาดนั้นอีกต่อไป

สาเหตุที่เกิดขึ้นบ่อยใน SourceTree เนื่องจากตัวเลือกPush all tagsถูกตั้งค่าเป็นเปิดตามค่าเริ่มต้น (อีกวิธีในการซ่อนข้อผิดพลาดนี้คือการยกเลิกการเลือกตัวเลือกนั้น)


"ดึงและจัดเก็บแท็กทั้งหมดในเครื่องไม่จำเป็นต้องเปิดใช้งาน" คือสิ่งที่ทำเพื่อฉันตรวจสอบว่าทำให้เกิดปัญหาซ้ำ
ทอม

สมมติว่า repo ต้นน้ำ (แหล่งกำเนิด) เป็นแหล่งที่มาของความจริงวิธีนี้เป็นการทำลายล้างน้อยที่สุดและแก้ไขปัญหาได้ทันที
Steve Henty

น่าเสียดายที่เมื่อคุณมีแท็กที่ถูกปฏิเสธ 15 แท็ก 1,2 และ 3 ขั้นตอนอาจเป็นเรื่องน่าเบื่อ ใช่การปิดใช้งานตัวเลือก "Push all tags" น่าจะเป็นวิธีที่ถูกต้อง
SagiSergeNadir

27

ยกเลิกการทำเครื่องหมายpush all tagsที่ด้านล่างของ UI เมื่อคุณยืนยันการพุชคอมไพล์


คุณหมายถึงpush all tags?
Wodin

ที่ดี! ไม่ได้สังเกตเลย. ขอบคุณ
Meg-90

@Wodin ดังนั้นหากคุณตรวจสอบpush all tagsใน UI มันจะพยายามเขียนทับแท็กก่อนหน้านี้ แต่คุณต้องปลดล็อคเพื่อป้องกันการเขียนทับ
JDev-Guns

@ JDev-Guns ฉันแค่สอบถามถ้อยคำ push all TABsท่านเดิมกล่าวว่า ผมไม่คุ้นเคยกับ SourceTree แต่ฉันสงสัยว่าคุณหมายแทนTAGs TABs
Wodin

@Wodin โอ้ gotcha! ฉันคิดว่าฉันพูดไปTAGsแต่ถ้าฉันไม่ได้ฉันตั้งใจจะพูดTABs
JDev-Guns

15

git pull --tagsใช้งานได้ดี แต่บางครั้งคุณอาจได้รับข้อผิดพลาดแม้จะมีคำสั่งนี้ ตัวอย่างข้อความแสดงข้อผิดพลาด:

 ! [rejected]        example_tag      -> example_tag  (would clobber existing tag)

สิ่งนี้สามารถแก้ไขได้ด้วยคำสั่ง: git pull --tags -f

ที่มา:

https://github.com/concourse/git-resource/issues/233


14

ตรวจสอบให้แน่ใจว่าคุณได้ยกเลิกการเลือกปุ่ม "Push all tags" ในขณะที่กด

ใส่คำอธิบายภาพที่นี่


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


-1

ฉันแก้ไขปัญหาในSourceTreeด้วยวิธีนี้:

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