Я создал тег в основной ветке, который называется v0.1
так:
git tag -a v0.1
Но затем я понял, что все еще есть некоторые изменения, которые мне нужно было объединить с мастером для выпуска 0.1, и я сделал это. Но теперь мой v0.1
тэг привязан (чтобы вызвать аналогию с заметкой) неверного коммита. Я хочу, чтобы он застрял на последнем коммите на мастере, но вместо этого он застрял на втором последнем коммите на мастере.
Как я могу переместить его в самый последний коммит на master?
git push origin :refs/tag/<tagname>
и затем сделайтеgit tag -fa <tagname>
и затемgit push origin master --tags
. В противном случае вы можете получить странные вещи в списке ссылок на пульте с добавлением символов ^ и {}. Спасибо Дэну на codebasehq.com за указание на это.:refs/tag/<tagname>
нее должно быть:refs/tags/<tagname>
.git push -f origin <tagname>
Точнее, вы должны принудительно добавить тег, а затем нажать с опциями --tags и -f:
источник
Подводя итог, если ваш пульт вызывается
origin
и вы работаете вmaster
филиале:Вы также можете заменить строку 4 на,
git push origin --tags
чтобы отправить все изменения с тегами из ваших локальных изменений.На основе @ stuart-golodetz, @ greg-hewgill, @eedeep, @ ben-hocking ответов, комментариев под своими ответами и комментариев NateS под моим ответом.
источник
Удалите его,
git tag -d <tagname>
а затем воссоздайте на правильном коммите.источник
Я стараюсь избегать нескольких вещей при использовании Git.
Используя знания внутренних органов, например, ссылки / теги. Я стараюсь использовать только документированные команды Git и избегать использования вещей, которые требуют знания внутреннего содержимого каталога .git. (То есть я рассматриваю Git как пользователя Git, а не разработчика Git.)
Применение силы, когда не требуется.
Переусердствовать (Нажмите на ветку и / или множество тегов, чтобы получить один тег, где я хочу.)
Итак, вот мое ненасильственное решение для изменения тега как локально, так и удаленно, без знания внутренних функций Git.
Я использую его, когда исправление программного обеспечения в конечном итоге имеет проблему и требует обновления / переиздания.
github
образец удаленного имени,fix123
образец имени тега и790a621265
пример фиксации.источник
Я оставлю здесь еще одну форму этой команды, которая соответствует моим потребностям.
Был тег,
v0.0.1.2
который я хотел переместить.А потом:
источник
Еще один способ:
Переместить тег в удаленном репо. (Замените HEAD на любой другой, если это необходимо.)
Выборка меняется обратно.
источник
Псевдоним для перемещения одного тега в другой коммит.
В вашем образце, чтобы двигаться совершить с хэш - e2ea1639 сделать:
git tagm v0.1 e2ea1639
.Для помеченных тегов используйте
git tagmp v0.1 e2ea1639
.Оба псевдонима сохраняют исходную дату и сообщение. Если вы используете,
git tag -d
вы потеряли свое оригинальное сообщение.Сохраните их в своем
.gitconfig
файлеисточник
Если вы хотите переместить аннотированный тег, изменив только целевой коммит, но сохранив аннотированное сообщение и другие метаданные, используйте:
использование: moveTag <tag-to-move> <target>
Вышеуказанная функция была разработана с помощью ссылки teerapap / git-move-annotated-tag.sh .
источник
git tag -f -a my_tag
уже сохраняется сообщение предыдущего сообщения (с git версии 2.11.0).