更改git标签的日期(或基于它的GitHub发布) [英] Change date of git tag (or GitHub Release based on it)

查看:1242
本文介绍了更改git标签的日期(或基于它的GitHub发布)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将GitHub的 :

b
$ b


如果您忘记标记发布或版本凹凸,您可以随时标记它,如下所示:



< pre-class =lang-sh prettyprint-override> git checkout SHA1_OF_PAST_COMMIT
git tag -m追溯标签版本1.5v1.5

虽然这是完全可用的,但它会将您的标签排除在时间顺序之外,这可能会影响到寻找最新标签的构建系统。但没有恐惧,Linus想到了一切:

#这会让你走到历史的最前面ry提交的位置
git checkout SHA1_OF_PAST_COMMIT

#此命令为您提供您在
上提交的日期时间git show --format =%aD | head -1

#这会暂时将git标记的时钟设置为从
上面复制/粘贴的日期GIT_COMMITTER_DATE =Thu Nov 11 12:21:57 2010 -0800git tag -a 0.9.33 -m追溯标记版本0.9.33

#合并两个...
GIT_COMMITTER_DATE =$(git show --format =%aD | head -1)git tag -a 0.9.33 -m追溯标签版本0.9.33


但是,如果您已经添加了标签,则不能在 git tag -f existingtag 中使用上面的内容,否则git会在尝试时抱怨合并:
$ b

Rammy:docubot phrogz $ git push --tags
to git @ github.com:Phrogz / docubot.git
! [被拒绝] 1.0.1 - > 1.0.1(已存在)
错误:未能将某些参考文献推送到'git@github.com:Phrogz / docubot.git'
提示:更新被拒绝,因为标记已存在于远程。

相反,您必须在本地移除标记:

  git tag -d 1.0.1 

远程推送删除

  git push origin:refs / tags / 1.0.1 

在GitHub上,重新加载发行版 - 发行版现在已标记为草稿 - 并删除草稿。



现在,添加基于标签的后备标签按照上面的说明,最后将结果标签推送到GitHub:

  git push --tags 

,然后重新添加GitHub发布信息。


I'm adding Releases to my projects on GitHub by adding tags to various commits in the Main branch.

In one of my projects I did not add the tags to the commits in chronological order. (I found obvious commits and tagged them, and then I found less obvious, older commits and tagged them.)

Now GitHub is showing v1.0.1 as current, with v0.7.0 preceding it, and v1.1.2 preceding that.

It appears to use the date on a tag's creation as the Release date instead of the commit that is being tagged. How can I edit my tags so that their dates are the same as the commit they are tagging?

解决方案

WARNING: This will not preserve tag messages for annotated tags.

Summary

For each tag that needs to be changed:

  1. Go back in time to the commit representing the tag
  2. Delete the tag (locally and remotely)
    • This will turn your "Release" on GitHub into a Draft that you can later delete.
  3. Re-add the same-named tag using a magic invocation that sets its date to the date of the commit.
  4. Push the new tags with fixed dates back up to GitHub.
  5. Go to GitHub, delete any now-draft releases, and re-create new releases from the new tags

In code:

# 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

Details

According to How to Tag in Git:

If you forget to tag a release or version bump, you can always tag it retroactively like so:

git checkout SHA1_OF_PAST_COMMIT
git tag -m"Retroactively tagging version 1.5" v1.5

And while that's perfectly usable, it has the effect of putting your tags out of chronological order which can screw with build systems that look for the "latest" tag. But have no fear. Linus thought of everything:

# 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"

However, if you have already added the tag, you cannot use the above with git tag -f existingtag or else git will complain when you try to merge:

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.

Instead, you must remove the tag locally:

git tag -d 1.0.1

Push that deletion remotely:

git push origin :refs/tags/1.0.1

On GitHub, reload Releases—the release has now been marked as a "Draft"—and remove the draft.

Now, add the backdated tag based on the instructions above, and finally push the resulting tag to GitHub:

git push --tags

and then go and re-add the GitHub Release information again.

这篇关于更改git标签的日期(或基于它的GitHub发布)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆