PERINGATAN: Ini tidak akan menyimpan pesan tag untuk tag beranotasi.
Ringkasan
Untuk setiap tag yang perlu diubah:
- Kembali ke masa lalu untuk komit yang mewakili tag
- Hapus tag (secara lokal dan jarak jauh)
- Ini akan mengubah "Rilis" Anda di GitHub menjadi Draf yang nantinya dapat Anda hapus.
- Tambahkan kembali tag dengan nama yang sama menggunakan doa ajaib yang menyetel tanggalnya ke tanggal komit.
- Dorong tag baru dengan tanggal tetap kembali ke GitHub.
- Buka GitHub, hapus rilis draf sekarang, dan buat ulang rilis baru dari tag baru
Dalam kode:
# Fixing tag named '1.0.1'
git checkout 1.0.1 # Go to the associated commit
git tag -d 1.0.1 # Locally delete the tag
git push origin :refs/tags/1.0.1 # Push this deletion up to GitHub
# Create the tag, with a date derived from the current head
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a 1.0.1 -m"v1.0.1"
git push --tags # Send the fixed tags to GitHub
Detail
Menurut Cara Menandai di Git :
Jika Anda lupa memberi tag pada rilis atau versi benjolan, Anda selalu dapat menandainya secara retroaktif seperti ini:
git checkout SHA1_OF_PAST_COMMIT
git tag -m"Retroactively tagging version 1.5" v1.5
Dan sementara itu sangat berguna, itu memiliki efek menempatkan tag Anda keluar dari urutan kronologis yang dapat mengacaukan sistem build yang mencari tag "terbaru". Tapi jangan takut. Linus memikirkan segalanya:
# This moves you to the point in history where the commit exists
git checkout SHA1_OF_PAST_COMMIT
# This command gives you the datetime of the commit you're standing on
git show --format=%aD | head -1
# And this temporarily sets git tag's clock back to the date you copy/pasted in from above
GIT_COMMITTER_DATE="Thu Nov 11 12:21:57 2010 -0800" git tag -a 0.9.33 -m"Retroactively tagging version 0.9.33"
# Combining the two...
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a 0.9.33 -m"Retroactively tagging version 0.9.33"
Namun, jika Anda telah menambahkan tag, Anda tidak dapat menggunakan yang di atas dengan git tag -f existingtag
atau git akan mengeluh ketika Anda mencoba untuk menggabungkan:
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.
Sebaliknya, Anda harus menghapus tag secara lokal:
git tag -d 1.0.1
Dorong penghapusan itu dari jarak jauh:
git push origin :refs/tags/1.0.1
Di GitHub, muat ulang Rilis — rilis tersebut sekarang telah ditandai sebagai "Draf" —dan hapus draf tersebut.
Sekarang, tambahkan tag mundur berdasarkan petunjuk di atas, dan terakhir dorong tag yang dihasilkan ke GitHub:
git push --tags
lalu buka dan tambahkan kembali informasi Rilis GitHub.
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