Как отредактировать существующее сообщение тега в git?

у нас есть несколько аннотированных тегов в нашем репозитории git. Старые теги имеют поддельные сообщения, которые мы хотели бы обновить, чтобы быть в нашем новом стиле.

% git tag -n1
v1.0 message
v1.1 message
v1.2 message
v2.0 Version 2.0 built on 15 October 2011.

в этом примере мы хотели бы сделать v1.х сообщений похож на П2.0 сообщений. Кто-нибудь знает, как мы это сделаем?

8 ответов


git tag <tag name> <tag name>^{} -f -m "<new message>"

это создаст новый тег с тем же именем (путем перезаписи оригинала).


чтобы обновить сложное сообщение, просто укажите опцию аннотированного тега с -a или опция подписанного тега с -s:

git tag <tag name> <tag name> -f -a

откроется редактор С содержанием вашего старого сообщения тега.


git tag <tag name> <tag name>^{} -f -a

это улучшение по сравнению с Энди и Эрик Ху ответы. Их ответы создадут новый объект тега, ссылающийся на старый объект тега, где оба они будут иметь одно и то же имя тега.

<tag name>^{} разрешит тег / ссылку, пока не найдет первый хэш фиксации.


TL; DR

вы можете сделать это, удалив свой тег и воссоздав его во время подделки даты и автора:

> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]
, index(,)) > } > }' | # 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. DIY

кроме того, чтобы обновить метки, Вы можете просто удалить их и создать их снова. Так получается out updating просто добавляет новый тег и указывает на старый, или, альтернативно, просто неявно удаляет старый и создает новый, чтобы указать на ту же фиксацию.

вы можете достичь этого, выдав:

> 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 <tag-name> <tag-name> -f -a

и неправильно. После этого, с

git show

команда, мы увидим теги стека с тем же именем.

он добавляет новый тег с тем же именем тега и новое сообщение в commit <tag-name>. Но он не удаляет старый тег. Это особый случай этой команды:

git tag [<commit> | <old-tag>] <tag-name>

, но только <old-tag> С <tag-name>.


правильное решение просто, просто обновите тег ЛАДНО.

git tag <tag-name> -f -a

помните, только один здесь.

если мы хотим изменить тег, который не HEAD нам нужен лишний


используя ответы выше, это мой псевдоним one-liner для .gitconfig. Заменяет существующий тег и сохраняет дату фиксации.

[alias]
    tm = "!sh -c 'f() { export GIT_COMMITTER_DATE=$(git log -1 --format=%ci ); git tag -f -a  ^{}; }; f '"

улучшения?


мы хотели бы сделать v1.X сообщения выглядят как v2.0 сообщение

С Git 2.17 (Q2 2018) будет альтернатива созданию новая тег git tag <tag name> <tag name> -f -m "<new message>", с "git tag" узнал явный "--edit" опции что позволяет сообщение, данное через"-m" и "-F" для дальнейшего редактирования.

посмотреть совершить 9eed6e4 (06 Feb 2018) by Николя Мори-Шезмартен (nmorey).
(слитый Junio C Hamano -- gitster -- на совершить 05d290e, 06 марта 2018)

tag добавить --edit опции

добавить --edit опция, которая позволяет изменять сообщения, предоставляемые -m или -F, таким же образом git commit --edit делает.


вам придется снова пометить, используя -f флаг силы.

git tag v1.0 -f -m "actual message"