TL; DR
Vous pouvez le faire en supprimant votre tag et en le recréant tout en usurpant la date et l'auteur:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
Histoire entière:
S'appuyant sur la réponse de Sungram (initialement proposée comme édition):
1. Réponse acceptée
C'est une amélioration par rapport aux réponses d' Andy et d' Eric Hu . Leurs réponses créeront un nouvel objet balise qui fait référence à l'ancien objet balise et les deux auront le même nom.
Pour illustrer cela, considérez ce qui suit:
> 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. L'amélioration de Sungram
Utiliser <tag name>^{}
comme deuxième argument de git tag
va à la place supprimer toutes les balises précédentes portant le même nom.
Considérez la poursuite de la session terminale précédente:
> 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. Enregistrez la date
Enfin, si vous souhaitez conserver la date de la balise d'origine comme date de la balise mise à jour, utilisez un peu de magie awk (ou similaire) ou collez simplement la date de votre choix à la place. Ce qui suit est un substitut pour le deuxième exemple (sinon la date d'origine serait perdue en raison d' une substitution ):
> 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]
Références:
4. DIY
Alternativement à la mise à jour des balises, vous pouvez simplement les supprimer et les recréer. Comme il s'avère que la mise à jour ajoute simplement une nouvelle balise et la fait pointer vers l'ancienne, ou alternativement, supprime implicitement l'ancienne et crée une nouvelle pour pointer vers le même commit de toute façon.
Vous pouvez y parvenir en émettant:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
Voici [optional]
un champ facultatif; <required>
est un champ obligatoire. Bien sûr, vous pouvez ajouter des indicateurs après la git tag
commande comme vous le feriez normalement.
git tag -m "A message" --edit v1.0
serait suffisant. Voir ma réponse ci