Как изменить существующее сообщение тега в 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.X сообщения выглядят как сообщение v2.0. Кто-нибудь знает, как мы это сделаем?

8 168

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. СДЕЛАЙ САМ

в качестве альтернативы для обновления тегов, вы можете просто удалить их и создать их снова. Как это получается 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> Обязательное поле. Конечно, вы можете добавить любые флаги после что вы обычно делаете.

@ Andy's solution

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

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

git show

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

он добавляет новый тег с тем же именем тега и новое сообщение при фиксации <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 Nicolas Morey-Chaisemartin (nmorey).
(слитый Junio C Hamano--gitster-- in совершить 05d290e, 06 марта 2018)

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

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

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

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