Git force push tag, когда метка уже существует на пульте

У меня уже есть тег, перенесенный на пульт, и когда другой пользователь создаст тот же тег и попытается отправить его, произойдет сбой, поскольку тег уже существует на пульте.

Но я подумал, что если я сделаю принудительное нажатие тега, это должно сработать. Но это не то, что я вижу.

Я думаю, что я должен сделать это.

 Create tag
 Push tag -> If push fails -> Delete tag on remote
                           -> push tag again.

Это правильно? Разве принудительный push-тег не должен позаботиться об этом?

Я использую аннотированные теги с

 git -a v1.0 -f -m "message"

Спасибо за поиск.

7 ответов

Это заставит подтолкнуть все теги и перезаписать существующие.

git push -f --tags

В моем случае, пульт дистанционного управления отклонял принудительное нажатие, когда тег уже существует.

Итак, когда толчок был отклонен, я сделал

git push --delete origin tagname 

и нажал новый тег.

Пожалуйста, смотрите комментарий Торека к моему вопросу. Есть случай, когда удаленный пользователь также может отклонить удаление.

Во-первых, обновите тег на вашем локальном компьютере:

      git tag v0.6.0 -f
Updated tag 'v0.6.0' (was cb85425)

Затем обновите тег на удаленном компьютере:

      git push origin v0.6.0 -f
Total 0 (delta 0), reused 0 (delta 0)

 + cb85425...bf17993 v0.6.0 -> v0.6.0 (forced update)

Я не рекомендую принудительно проталкивать все теги - аверс. эта сила толкает каждый локальный тег, перезаписывая удаленные. Это может нанести ущерб в ситуациях, когда состояние представлено движущимися тегами или если какая-либо подобная функция добавляется позже.

Чтобы принудительно нажать/перезаписать один тег, который вам нужен, а не все из них... выполните:

git push origin имя тега -f

В основном вы спрашиваете, как вы решаете проблему с попыткой нажать на ветку, которая уже содержит тег, который вы пытаетесь нажать (т.е. это не удается, потому что тег уже существует). Вы можете либо удалить тег на удаленном компьютере, либо удалить тег на локальном компьютере, прежде чем нажать: devconnected.com/how-to-delete-local-and-remote-tags-on-git

NB: не используйте или будьте осторожны при использовании

      git push -f --tags

Поскольку, хотя это может работать в некоторых сценариях, имейте в виду, что он будет отправлять ВСЕ локальные теги, и часто устаревшие / локальные теги создаются по ошибке, которые не должны быть отправлены.

если ты получаешь fatal: tag 'beta' already exists ошибка, тогда используйте

      git tag -a beta --force  #To create tag locally
git push -f --tags #To push your tag to the repository

Во-первых, удалите этот тег, который вы хотите заменить в удаленном:

git push origin --delete <tag-name>

затем нажмите свой тег на удаленный:

git push --tags
Другие вопросы по тегам