TL; DR
Sie können dies tun, indem Sie Ihr Tag löschen und neu erstellen, während Sie Datum und Autor fälschen:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
Ganze Geschichte:
Aufbauend auf Sungrams Antwort (ursprünglich als Bearbeitung vorgeschlagen):
1. Akzeptierte Antwort
Dies ist eine Verbesserung gegenüber den Antworten von Andy und Eric Hu . Ihre Antworten erstellen ein neues Tag-Objekt, das auf das alte Tag-Objekt verweist, und beide haben denselben Namen.
Betrachten Sie zur Veranschaulichung Folgendes:
> 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. Sungrams Verbesserung
Verwenden Sie stattdessen <tag name>^{}
als zweites Argument von git tag
will alle vorherigen Tags mit demselben Namen.
Betrachten Sie die Fortsetzung der vorherigen Terminalsitzung:
> 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. Speichern Sie das Datum
Wenn Sie das Datum des ursprünglichen Tags als Datum des aktualisierten Tags beibehalten möchten, verwenden Sie eine awk (oder ähnliche) Magie oder fügen Sie stattdessen einfach das gewünschte Datum ein. Das Folgende ist ein Ersatz für das zweite Beispiel (andernfalls würde das ursprüngliche Datum durch Überschreiben verloren gehen):
> 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]
Verweise:
4. DIY
Alternativ zum Aktualisieren der Tags können Sie sie einfach löschen und erneut erstellen. Wie sich herausstellt, fügt das Aktualisieren nur ein neues Tag hinzu und verweist auf das alte, oder löscht alternativ einfach implizit das alte und erstellt ein neues, das ohnehin auf dasselbe Commit verweist.
Sie können dies erreichen, indem Sie Folgendes ausgeben:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
Hier [optional]
ist ein optionales Feld; <required>
Ist ein Pflichtfeld. Natürlich können Sie nach dem git tag
Befehl beliebige Flags hinzufügen .
git tag -m "A message" --edit v1.0
würde ein einfaches ausreichen. Siehe meine Antwort unten