Если вы использовали Git в течение значительного количества времени, вы, вероятно, уже знаете, как отправить свои коммиты из локальной ветки в удаленный репозиторий. Но, как вы, возможно, знаете, Git не только отслеживает коммиты, но и другие объекты / ссылки, например теги.
Эти теги, которые указывают на определенное место в истории репо, также могут быть отправлены в удаленные репозитории, чтобы другие разработчики могли использовать или ссылаться на них. Теги могут использоваться для многих вещей, но наиболее часто я вижу вариант использования, чтобы пометить номер версии проекта в определенный момент истории.
Чтобы отправить их в удаленное репо, у вас есть несколько вариантов:
$ git push <repo-name> <tag-name>
Эта команда отправит один тег в удаленное репо, и это обычно предпочтительный метод, о котором я расскажу подробнее ниже.
Другой способ - отправить все теги в удаленное репо:
$ git push --tags <repo-name>
Этот способ не рекомендуется, потому что у разработчиков обычно есть старые или «плохие» теги в своих локальных репозиториях, которым нет необходимости находиться в удаленном, поэтому рекомендуется только когда-либо явно вставлять тег, используя первый метод, а не все ваши теги сразу.
Но что, если вам нужно переместить тег в другой коммит? Обычно это происходит, когда вы случайно помечаете неправильную фиксацию или если вы забыли объединить изменения в мастер перед тем, как пометить. В этом случае вам нужно сделать следующее:
- Удалить тег из удаленного репо
- Переместите тег в правильную фиксацию
- Отправьте тег в удаленное репо
С точки зрения команд Git, эта последовательность будет выглядеть так:
$ git push <repo-name> :refs/tags/<tag-name>
$ git tag -fa <tag-name> <commit-hash>
$ git push -f <repo-name> <tag-name>
-f
является сокращением для --force
, которое, например, отключает
определенные проверки и позволяет изменять ссылки.
Вы также можете опустить аргумент <commit-hash>
git tag
если вы
помечаете самую последнюю фиксацию. Лично я предпочитаю четко указывать
свои команды тегов, чтобы всегда точно знать, что я помечаю, но вы
должны делать то, что лучше всего подходит для вас.