AVERTISSEMENT: cela ne conservera pas les messages de balise pour les balises annotées.
Résumé
Pour chaque balise à modifier:
- Remontez dans le temps jusqu'au commit représentant le tag
- Supprimer le tag (localement et à distance)
- Cela transformera votre "Release" sur GitHub en un brouillon que vous pourrez supprimer ultérieurement.
- Ajoutez à nouveau la balise du même nom en utilisant un appel magique qui définit sa date sur la date de la validation.
- Poussez les nouvelles balises avec des dates fixes vers GitHub.
- Accédez à GitHub, supprimez toutes les versions actuellement brouillon et recréez de nouvelles versions à partir des nouvelles balises
Dans du code:
# 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
Détails
Selon Comment étiqueter dans Git :
Si vous oubliez de marquer une version ou une modification de version, vous pouvez toujours la marquer rétroactivement comme ceci:
git checkout SHA1_OF_PAST_COMMIT
git tag -m"Retroactively tagging version 1.5" v1.5
Et bien que cela soit parfaitement utilisable, cela a pour effet de mettre vos balises dans l'ordre chronologique, ce qui peut se visser avec des systèmes de construction qui recherchent la «dernière» balise. Mais n'ayez pas peur. Linus a pensé à tout:
# 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"
Cependant, si vous avez déjà ajouté la balise, vous ne pouvez pas utiliser ce qui précède avec git tag -f existingtag
sinon git se plaindra lorsque vous essayez de fusionner:
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.
Au lieu de cela, vous devez supprimer la balise localement:
git tag -d 1.0.1
Poussez cette suppression à distance:
git push origin :refs/tags/1.0.1
Sur GitHub, rechargez les versions (la version a maintenant été marquée comme "Brouillon") et supprimez le brouillon.
Maintenant, ajoutez la balise antidatée en fonction des instructions ci-dessus, et enfin poussez la balise résultante vers GitHub:
git push --tags
puis allez et ajoutez à nouveau les informations de version de 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