คำเตือน: สิ่งนี้จะไม่เก็บรักษาข้อความแท็กสำหรับแท็กที่มีคำอธิบายประกอบ
สรุป
สำหรับแต่ละแท็กที่ต้องเปลี่ยน:
- ย้อนเวลากลับไปที่การกระทำที่เป็นตัวแทนของแท็ก
- ลบแท็ก (ในเครื่องและจากระยะไกล)
- การดำเนินการนี้จะเปลี่ยน "Release" ของคุณบน GitHub ให้เป็นแบบร่างที่คุณสามารถลบได้ในภายหลัง
- เพิ่มแท็กชื่อเดียวกันอีกครั้งโดยใช้การเรียกใช้เวทย์มนตร์ที่กำหนดวันที่เป็นวันที่ของการคอมมิต
- ดันแท็กใหม่ที่มีวันที่คงที่สำรองไว้ที่ GitHub
- ไปที่ GitHub ลบเวอร์ชันร่างตอนนี้และสร้างรีลีสใหม่จากแท็กใหม่
ในรหัส:
git checkout 1.0.1
git tag -d 1.0.1
git push origin :refs/tags/1.0.1
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a 1.0.1 -m"v1.0.1"
git push --tags
รายละเอียด
ตามวิธีการแท็กใน Git :
หากคุณลืมติดแท็กรุ่นหรือเวอร์ชันคุณสามารถติดแท็กย้อนหลังได้ตลอดเวลาดังนี้:
git checkout SHA1_OF_PAST_COMMIT
git tag -m"Retroactively tagging version 1.5" v1.5
และในขณะที่สามารถใช้งานได้อย่างสมบูรณ์แบบ แต่ก็มีผลในการทำให้แท็กของคุณไม่เรียงตามลำดับเวลาซึ่งอาจทำให้ระบบสร้างที่มองหาแท็ก "ล่าสุด" เสียหายได้ แต่ไม่ต้องกลัว Linus นึกถึงทุกสิ่ง:
git checkout SHA1_OF_PAST_COMMIT
git show --format=%aD | head -1
GIT_COMMITTER_DATE="Thu Nov 11 12:21:57 2010 -0800" git tag -a 0.9.33 -m"Retroactively tagging version 0.9.33"
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a 0.9.33 -m"Retroactively tagging version 0.9.33"
อย่างไรก็ตามหากคุณได้เพิ่มแท็กแล้วคุณไม่สามารถใช้ข้างต้นร่วมกับgit tag -f existingtag
มิฉะนั้น git จะบ่นเมื่อคุณพยายามรวม:
Rammy:docubot phrogz$ git push --tags
To git@github.com:Phrogz/docubot.git
! [rejected] 1.0.1 -> 1.0.1 (already exists)
error: failed to push some refs to 'git@github.com:Phrogz/docubot.git'
hint: Updates were rejected because the tag already exists in the remote.
แต่คุณต้องลบแท็กในเครื่อง แต่:
git tag -d 1.0.1
กดการลบนั้นจากระยะไกล:
git push origin :refs/tags/1.0.1
ใน GitHub ให้โหลดรุ่นใหม่ - ตอนนี้รุ่นถูกทำเครื่องหมายเป็น "ฉบับร่าง" แล้วและนำฉบับร่างออก
ตอนนี้เพิ่มแท็กที่ย้อนหลังตามคำแนะนำด้านบนและสุดท้ายดันแท็กผลลัพธ์ไปที่ GitHub:
git push --tags
จากนั้นไปและเพิ่มข้อมูล GitHub Release อีกครั้ง
git tag -l | while read -r tag; do `git checkout $tag && git tag -d $tag && git push origin :refs/tags/$tag && GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a $tag -m"$tag"`; done; git push --tags