TL; DR
Anda dapat melakukan ini dengan menghapus tag dan membuatnya kembali sambil mem-spoof tanggal dan pembuat:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
Seluruh cerita:
Membangun jawaban Sungram (awalnya diusulkan sebagai suntingan):
1. Jawaban yang diterima
Ini merupakan peningkatan dari jawaban Andy dan Eric Hu . Jawaban mereka akan membuat objek tag baru yang mereferensikan objek tag lama dan keduanya akan memiliki nama yang sama.
Untuk menggambarkan hal ini, pertimbangkan hal berikut:
> 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. Peningkatan Sungram
Menggunakan <tag name>^{}
argumen kedua git tag
sebagai gantinya akan menghapus semua tag sebelumnya dengan nama yang sama.
Pertimbangkan kelanjutan sesi terminal sebelumnya:
> 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. Simpan tanggal
Terakhir, jika Anda ingin menyimpan tanggal dari tag asli sebagai tanggal dari tag yang diperbarui, gunakan beberapa sihir awk (atau sejenisnya) atau cukup tempel tanggal yang Anda inginkan. Berikut ini adalah pengganti untuk contoh kedua (jika tidak, tanggal asli akan hilang karena ditimpa):
> 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]
Referensi:
4. DIY
Atau untuk memperbarui tag, Anda bisa menghapusnya dan membuatnya lagi. Ternyata memperbarui hanya menambahkan tag baru dan membuatnya menunjuk ke yang lama, atau secara alternatif, hanya menghapus yang lama dan membuat yang baru untuk menunjuk ke komit yang sama pula.
Anda dapat mencapai ini dengan menerbitkan:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
Ini [optional]
adalah bidang opsional; <required>
adalah bidang wajib diisi. Tentu saja, Anda dapat menambahkan bendera apa pun setelah git tag
perintah yang biasanya Anda lakukan.
git tag -m "A message" --edit v1.0
akan cukup. Lihat jawaban saya di bawah ini