Может ли легкий тег быть преобразован в аннотированный тег? - PullRequest
34 голосов
/ 15 февраля 2011

Я пометил коммит легким тегом и перенес этот тег в удаленный репозиторий, которым поделились с другими разработчиками.Теперь я понял, что должен был аннотировать его так, чтобы оно появилось в git describe.

Есть ли способ преобразовать его / повторно пометить коммит, не нарушая ничего?

Ответы [ 4 ]

29 голосов
/ 15 февраля 2011

Легкий тег - это просто «ссылка», указывающая на этот коммит.Вы можете принудительно создать новый аннотированный тег поверх старого тега:

git tag -a -f <tagname> <tagname>

Начиная с Git v1.8.2, вам нужно использовать --force для замены любых тегов на пульте на git push, даже если вы заменяете облегченный тег на что-то, что по сути является ускоренной перемоткой вперед или истинным объектом тега, указывающим на тот же коммит, что и существующая ссылка на тег.

git push --force origin <tagname>
21 голосов
/ 10 января 2014

На основании ответа Чарльза и этого сообщения в блоге , я думаю, что лучше использовать что-то вроде этого:

#!/bin/sh
tag=$1
date="$(git show $tag --format=%aD | head -1)"
GIT_COMMITTER_DATE="$date" git tag -a -f $tag $tag
2 голосов
/ 05 ноября 2014

Вы также можете просто использовать git describe --tags, чтобы включить легкие теги в поиск.

1 голос
/ 20 октября 2016

Преобразовать все теги в аннотированные (на примере Чарльза Бэйли и комментария Ференца Вагнера):

for tag in $(git tag -l); do git tag -a -f $tag $tag^0 -m $tag; done
git push --tags --force
...