Как изменить существующее сообщение тега в 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 ответов:
git tag <tag name> <tag name>^{} -f -m "<new message>"
это создаст новый тег с тем же именем (путем перезаписи оригинала).
чтобы обновить сложное сообщение, просто укажите опцию аннотированного тега с помощью
-a
или параметр подписанного тега с-s
:git tag <tag name> <tag name> -f -a
откроется редактор с содержимым вашего старого сообщения тега.
TL; DR
вы можете сделать это, удалив свой тег и воссоздав его при подмене даты и автора:
, 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]> git tag -d <tag-name> > [GIT_COMMITTER_DATE=<original-commit-date>] \ > [GIT_AUTHOR_NAME=<original-author-name>] \ > git tag <tag-name> [commit]
ссылки:
Итак: отфильтруйте вывод по первому токену строки и извлеките остаток строки с помощью awk
Итак: как поместить комментарий к строке bash в многострочную команду
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
делает.