Сегодня я просматривал логи проекта и понял, что некоторое время назад я нажал на имя тега. Есть ли способ переименовать тег? Google не нашел ничего полезного.
Я понимаю, что могу проверить версию с тегами и создать новый тег, я даже попробовал это. Но это, кажется, создает объект тега, который не совсем прав. Для одного,
git tag -l
перечисляет его не по порядку относительно всех других тегов. Я понятия не имею, если это важно, но это заставляет меня поверить, что новый объект тега не совсем то, что я хочу. Я могу с этим смириться, потому что мне действительно важно, чтобы имя тега соответствовало документации, но я бы предпочел сделать это «правильно», предполагая, что есть правильный способ сделать это.
git log --oneline --decorate --graph
полезно при очистке тегов.Ответы:
Вот как я переименую тег
old
вnew
:Двоеточие в команде push удаляет тег из удаленного хранилища. Если вы этого не сделаете, Git создаст старую метку на вашем компьютере, когда вы потянете.
Наконец, убедитесь, что другие пользователи удаляют удаленный тег. Пожалуйста, скажите им (коллегам) выполнить следующую команду:
Обратите внимание, что если вы изменяете аннотированный тег , вам нужно убедиться, что имя нового тега ссылается на базовый коммит, а не на старый объект аннотированного тега, который вы собираетесь удалить. Поэтому используйте
git tag -a new old^{}
вместоgit tag new old
(это потому, что аннотированные теги являются объектами, в то время как легкие теги - нет, больше информации в этом ответе ).источник
git push origin :refs/tags/old
можно упростить,git push origin :old
я думаю.git tag new old
создаст тег, указывающий на старый тег, а не на фиксацию старого тега. (См. Почему я не могуПервоначальный вопрос заключался в том, как переименовать тег, что легко: сначала создайте NEW как псевдоним OLD,
git tag NEW OLD
затем удалите OLD:git tag -d OLD
.Цитата относительно «пути Git» и (в) здравомыслии не соответствует действительности, потому что она говорит о сохранении имени тега, но заставляет его ссылаться на другое состояние хранилища.
источник
git push origin
бизнес.git tag new old
создаст тег, указывающий на старый тег, а не на фиксацию старого тега. (См. Почему я не могуВ дополнение к другим ответам:
Прежде всего , необходимо создать псевдоним из старого имени тега, указывая на оригинал фиксации:
Затем вам нужно удалить старый локально :
Затем удалите тег на вашем удаленном местоположении (ях):
Наконец, вам нужно добавить новый тег в удаленное местоположение. Пока вы этого не сделаете, новые теги не будут добавлены:
Повторяйте это для каждого удаленного местоположения.
Помните о последствиях изменения тега Git для потребителей пакета!
источник
git tag new old
создаст тег, указывающий на старый тег, а не на фиксацию старого тега. (См. Почему я не могуgit tag new old^{}
, то нам не нужноgit tag new_tag_name old_tag_name
(первый шаг).Если он опубликован, вы не можете удалить его (не рискуя быть заархивированным и обработанным). «Git way» - это сделать:
С другой стороны,
Это так безумно, потому что:
Все предоставлено man-страницами .
источник
На этой вики-странице есть интересный однострочный текст, который напоминает нам, что мы можем нажать несколько ссылок :
Так что идея состоит в том, чтобы подтолкнуть:
<new-tag>
для каждых фиксаций , на которые ссылаются<old-tag
>:<refs/tags/old-tag>:<refs/tags/new-tag>
,<old-tag>
::<refs/tags/old-tag>
См. В качестве примера « Изменить соглашение об именовании тегов в репозитории git? ».
источник
git cat-file -p <tag>
; с вашим методом в моей системе я получаю тэг ref (<new-tag>
) с переименованием , но его поле тэга все еще<old-tag>
.В качестве дополнения к другим ответам я добавил псевдоним, чтобы сделать все это за один шаг, с более знакомым ощущением команды * nix move. Аргумент 1 - это имя старого тега, аргумент 2 - это имя нового тега.
Применение:
источник
!sh
(вопрос был о Windows , Git), однако, после обновления формата в дальнейшем он работал:renametag = "!f() { git tag $2 $1; git tag -d $1; git push origin :refs/tags/$1; git push --tags; }; f"
.Следуйте трехэтапному подходу для одного или нескольких тегов.
Шаг 1: Определите идентификатор коммита / объекта для коммита, на который указывает текущий тег
Шаг 2: Удалить тег из хранилища
Шаг 3. Создайте новый тег, указывающий на тот же идентификатор фиксации, на который указывал старый тег
Когда локальный git готов к изменению имени тега, эти изменения могут быть перенесены обратно в источник, чтобы другие могли их принять.
источник
git push origin :refs/tags/v0.1.0-Demo
и отодвинуть тэги (с другими ожидающими вещами)git push --tags
Для любителей приключений это можно сделать одной командой:
источник
git gc
недавно запускалиcp
), с сообщением сопровождающего нетронутым.Независимо от проблем, связанных с отправкой тегов и переименованием тегов, которые уже были переданы, в случае, если тег для переименования является аннотированным , вы можете сначала скопировать его благодаря следующей однострочной командной строке:
Затем вам просто нужно удалить старый тег:
Я нашел эту командную строку благодаря следующим двум ответам:
Изменить:
Столкнувшись с проблемами при использовании автоматической синхронизации настроек тегов
fetch.pruneTags=true
(как описано в https://stackoverflow.com/a/49215190/7009806 ), я лично предлагаю сначала скопировать новый тег на сервер, а затем удалить старый. Таким образом, новый тег не удаляется случайным образом при удалении старого тега, и синхронизация тегов хотела бы удалить новый тег , которого еще нет на сервере . Так, например, все вместе мы получаем:источник
Вы также можете переименовать удаленные теги, не извлекая их, дублируя старый тег / ветку на новое имя и удаляя старое, в одном
git push
команде.Удаленный тег переименование / Удаленный филиал → тег конверсия: (Примечание:
:refs/tags/
)Удаленный филиал переименовывать / Remote тег → преобразование ветви: (Примечание:
:refs/heads/
)Выход переименовывает удаленный тег:
источник