TL; DR
คุณสามารถทำได้โดยลบแท็กและสร้างใหม่ในขณะที่ปลอมแปลงวันที่และผู้แต่ง:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
เรื่องราวทั้งหมด:
การสร้างคำตอบของSungram (แต่เดิมเสนอเป็นการแก้ไข):
1. คำตอบที่ยอมรับ
นี่เป็นการปรับปรุงคำตอบของAndyและEric Hu คำตอบของพวกเขาจะสร้างวัตถุแท็กใหม่ที่อ้างอิงถึงวัตถุแท็กเก่าและทั้งสองจะมีชื่อเดียวกัน
เพื่อแสดงสิ่งนี้ให้พิจารณาสิ่งต่อไปนี้:
> git tag tag1 tag1 -f -a # accepted answer
> git rev-list --objects -g --no-walk --all
[ example output: ]
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
260ab7928d986472895b8c55e54569b3f3cb9517 tag1
a5797673f610914a45ef7ac051e3ee831a6e7c25 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17
> git show tag1
tag tag1
Tagger: [tagger]
Date: [date of updated tag]
[Updated description]
tag tag1
Tagger: [tagger]
Date: [date of original tag]
[Original description]
[tagged commit details]
2. การปรับปรุงของ Sungram
การใช้<tag name>^{}
เป็นอาร์กิวเมนต์ที่สองของgit tag
จะแทนที่แท็กก่อนหน้าทั้งหมดด้วยชื่อเดียวกัน
พิจารณาความต่อเนื่องของเซสชันเทอร์มินัลก่อนหน้า:
> git tag tag1 tag1^{} -f -a # suggested improvement
> git rev-list --objects -g --no-walk --all
[ example output: ]
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
75f02acacfd7d91d55b5bcfdfb1f00aebeed15e3 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17
> git show tag1
tag tag1
Tagger: [tagger]
Date: [date of updated tag]
[Updated description]
[tagged commit details]
3. บันทึกวันที่
สุดท้ายหากคุณต้องการเก็บวันที่ของแท็กเดิมเป็นวันที่ของแท็กที่อัปเดตให้ใช้เวทย์ awk (หรือคล้ายกัน) หรือวางวันที่ที่คุณต้องการแทน ต่อไปนี้เป็นสิ่งทดแทนสำหรับตัวอย่างที่สอง (มิฉะนั้นวันที่ดั้งเดิมจะหายไปเนื่องจากการแทนที่):
> GIT_COMMITTER_DATE="$(git show tag1 | # get info about the tag cascade including the date original of the original tag
> awk '{
> if ($1 == "Date:") {
> print substr($0, index($0,$3))
> }
> }' | # extract all the dates from the info
> tail -2 | head -1)" `# get the second to last date, as the last one is the commit date` \
> git tag tag1 tag1^{} -a -f # finally, update the tag message, but save the date of the old one
>
> git rev-list --objects -g --no-walk --all
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
e18c178f2a548b37799b100ab90ca785af1fede0 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17
> git show tag1
tag tag1
Tagger: [tagger]
Date: [date of original tag]
[Updated description]
[tagged commit details]
อ้างอิง:
4. DIY
หรืออีกวิธีหนึ่งในการอัปเดตแท็กคุณสามารถลบและสร้างใหม่ได้อีกครั้ง เนื่องจากปรากฎว่าการอัปเดตเพิ่งเพิ่มแท็กใหม่และทำให้มันชี้ไปที่แท็กเก่าหรือมิฉะนั้นเพียงแค่ลบแท็กเก่าโดยปริยายและสร้างแท็กใหม่เพื่อชี้ไปที่การกระทำเดียวกัน
คุณสามารถทำได้โดยการออก:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
นี่[optional]
คือฟิลด์ตัวเลือก; <required>
เป็นฟิลด์บังคับ แน่นอนคุณสามารถเพิ่มการตั้งค่าสถานะใด ๆ หลังจากgit tag
คำสั่งที่คุณปกติจะ
git tag -m "A message" --edit v1.0
ก็เพียงพอแล้ว ดูคำตอบของฉันด้านล่าง