경고 : 주석이 달린 태그에 대한 태그 메시지는 보존 되지 않습니다 .
요약
변경해야하는 각 태그에 대해 :
- 태그를 나타내는 커밋으로 시간을 거슬러 올라갑니다.
- 태그 삭제 (로컬 및 원격)
- 이렇게하면 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에서 태그하는 방법에 따르면 :
릴리스 또는 버전 범프에 태그를 지정하는 것을 잊은 경우 언제든지 다음과 같이 소급하여 태그를 지정할 수 있습니다.
git checkout SHA1_OF_PAST_COMMIT
git tag -m"Retroactively tagging version 1.5" v1.5
완벽하게 사용할 수 있지만, "최신"태그를 찾는 빌드 시스템을 망칠 수있는 시간순으로 태그를 배치하는 효과가 있습니다. 그러나 두려워하지 마십시오. Linus는 모든 것을 생각했습니다.
# 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's 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 git@github.com:Phrogz/docubot.git
! [rejected] 1.0.1 -> 1.0.1 (already exists)
error: failed to push some refs to 'git@github.com: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 릴리스 정보를 다시 추가하십시오.
git tag -l | while read -r tag; do `git checkout $tag && git tag -d $tag && git push origin :refs/tags/$tag && GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a $tag -m"$tag"`; done; git push --tags