Ответ 1
Резюме
Для каждого тега, который необходимо изменить:
- Вернитесь назад к фиксации, представляющей тег
- Удалить тег (локально и удаленно)
- Это превратит ваш "выпуск" в GitHub в черновик, который позже можно удалить.
- Повторно добавьте тег с одинаковым именем, используя магический вызов, который устанавливает дату в дату фиксации.
- Нажимайте новые теги с фиксированными датами до GitHub.
- Перейдите в GitHub, удалите все выпуски сейчас-проекта и заново создайте новые выпуски из новых тегов
В коде:
# Fixing tag named '1.0.1'
git checkout 1.0.1 # Go to the associated commit
git tag -d 1.0.1 # Locally delete the tag
git push origin :refs/tags/1.0.1 # Push this deletion up to GitHub
# Create the tag, with a date derived from the current head
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a 1.0.1 -m"v1.0.1"
git push --tags # Send the fixed tags to GitHub
Подробнее
В соответствии с Как пометить в Git:
Если вы забыли пометить выпуск или версию bump, вы всегда можете пометить ее задним числом так:
git checkout SHA1_OF_PAST_COMMIT git tag -m"Retroactively tagging version 1.5" v1.5
И хотя это прекрасно подходит для использования, это приводит к тому, что ваши теги выводятся из хронологического порядка, которые могут завинчивать системы сборки, которые ищут "последний" тег. Но не бойтесь. Линус думал обо всем:
# This moves you to the point in history where the commit exists git checkout SHA1_OF_PAST_COMMIT # This command gives you the datetime of the commit you're standing on git show --format=%aD | head -1 # And this temporarily sets git tag clock back to the date you copy/pasted in from above GIT_COMMITTER_DATE="Thu Nov 11 12:21:57 2010 -0800" git tag -a 0.9.33 -m"Retroactively tagging version 0.9.33" # Combining the two... GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a 0.9.33 -m"Retroactively tagging version 0.9.33"
Однако, если вы уже добавили тег, вы не можете использовать приведенное выше с помощью git tag -f existingtag
, иначе git будет жаловаться при попытке слияния:
Rammy:docubot phrogz$ git push --tags
To [email protected]:Phrogz/docubot.git
! [rejected] 1.0.1 -> 1.0.1 (already exists)
error: failed to push some refs to '[email protected]:Phrogz/docubot.git'
hint: Updates were rejected because the tag already exists in the remote.
Вместо этого вы должны локально удалить тег:
git tag -d 1.0.1
Удалите это удаление удаленно:
git push origin :refs/tags/1.0.1
В GitHub перезагружайте релизы - релиз теперь отмечен как "Черновик" - и удалите черновик.
Теперь добавьте обратный тег на основе вышеприведенных инструкций и, наконец, нажмите результирующий тег на GitHub:
git push --tags
а затем снова и снова добавьте информацию о выпуске GitHub.