TL; DR
Це можна зробити, видаливши тег і відтворивши його, підробляючи дату та автора:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
Вся історія:
Спираючись на відповідь Sungram (спочатку пропонувався як редагування):
1. Прийнята відповідь
Це поліпшення щодо відповідей Енді та Еріка Ху . Їх відповіді створять новий об’єкт тегу, який посилається на старий об’єкт тегу, і обидва будуть мати однакове ім’я.
Щоб проілюструвати це, врахуйте наступне:
> 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. Поліпшення Sungram
Використовуючи <tag name>^{}
як другий аргумент git tag
, натомість буде видалено всі попередні теги з тим самим іменем.
Розглянемо продовження попереднього термінального сеансу:
> 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. Збережіть дату
Нарешті, якщо ви хочете зберегти дату початкового тегу як дату оновленого тегу, використовуйте деяку магію awk (або подібну) або просто вставляйте потрібну дату замість цього. Далі наведено заміну другого прикладу (інакше початкова дата втратиться через переоцінку):
> 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]
Список літератури:
4. Зроби сам
Крім того, щоб оновити теги, ви можете просто видалити їх і створити їх заново. Як виявляється, оновлення просто додає новий тег і робить його вказівкою на старий, або, як альтернативу, просто неявно видаляє старий і створює новий, щоб в будь-якому разі вказувати на те саме виконання.
Ви можете досягти цього, видавши:
> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
Тут [optional]
необов’язкове поле; <required>
є обов'язковим полем. Звичайно, ви можете додати будь-які прапори після git tag
команди, якою ви зазвичай хотіли б.
git tag -m "A message" --edit v1.0
. Дивіться мою відповідь нижче