AVVISO: questo non conserverà i messaggi di tag per i tag annotati.
Sommario
Per ogni tag che deve essere modificato:
- Torna indietro nel tempo al commit che rappresenta il tag
- Elimina il tag (in locale e in remoto)
- Questo trasformerà il tuo "rilascio" su GitHub in una bozza che potrai successivamente eliminare.
- Riaggiungi il tag con lo stesso nome usando una chiamata magica che imposta la sua data alla data del commit.
- Esegui il push dei nuovi tag con date fisse su GitHub.
- Vai su GitHub, elimina tutte le versioni in bozza e ricrea le nuove versioni dai nuovi tag
In codice:
# 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
Dettagli
Secondo How to Tag in Git :
Se dimentichi di taggare una release o un bump di versione, puoi sempre taggarlo retroattivamente in questo modo:
git checkout SHA1_OF_PAST_COMMIT
git tag -m"Retroactively tagging version 1.5" v1.5
E sebbene sia perfettamente utilizzabile, ha l'effetto di mettere i tuoi tag fuori ordine cronologico, il che può rovinare i sistemi di build che cercano il tag "più recente". Ma non aver paura. Linus ha pensato a tutto:
# 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"
Tuttavia, se hai già aggiunto il tag, non puoi usare quanto sopra con git tag -f existingtag
altrimenti git si lamenterà quando proverai a unire:
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.
Invece, devi rimuovere il tag localmente:
git tag -d 1.0.1
Spingi l'eliminazione da remoto:
git push origin :refs/tags/1.0.1
Su GitHub, ricarica le versioni (la versione ora è stata contrassegnata come "Bozza") e rimuovi la bozza.
Ora aggiungi il tag retrodatato in base alle istruzioni sopra e infine invia il tag risultante a GitHub:
git push --tags
quindi vai e aggiungi nuovamente le informazioni sulla versione di 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