Работа с тегами в Git
Тегами в git-репозитории можно отмечать коммиты или, в общем случае, любые объекты. В нашей команде мы отмечаем тегами релизы, которые уходят в продакшин.
Создание тега
Помечаем локальный коммит
git tag 12345Отправляем его во внешний репозиторий
git push origin 12345
Удаление тега из репозитория
Удаляем тег локально
git tag -d 12345Удаляем его во внешнем репозитории
git push origin :refs/tags/12345Оповещаем каким-либо способом коллег, чтобы они сделали у себя команду из пункта 1
Без оповещения нельзя обойтись из-за того, что положение тега в локальном репозитории не синхронизируется автоматически в внешним репозиторием. Это можно сделать только явно выполнив соответствующую команду.
Перемещение тега на другой коммит
Принудительно перезаписываем тег
git tag -f 12345Отправляем во внешний репозиторий с принудительной перезаписью
git push --force origin 12345Оповещаем коллег как и в случае удаления тега
Дополнение
Если не указан хеш-код объекта, то теггируется последний коммит в активном бранче. Чтобы отметить тегом произвольный коммит нужно последним аргументом передать весь его хеш-код.
git tag 12345 6ff87c4664981e4397625791c8ea3bbb5f2279a3
Отправить во внешний репозиторий все теги текущей ветки можно одной командой.
git push --tags
А у нас теги автоматически создаются после каждого деплоя на продакшин и стейджинг. Capistrano сильно выручает.
У нас для деплоя используется самописный скрипт, куда эти команды тоже можно встроить. Правда всем лень, наверное, ещё чуть-чуть автоматизировать процесс.