如何在Git中标记旧的提交?

我们是git新手,我想在我们的存储库的开头设置一个标签。我们的生产代码与开始存储库相同,但从那时起我们就进行了提交。一开始的标签将允许我们“回滚”生产到已知的稳定状态。

那么如何向任意的旧提交添加标签呢?

405353 次浏览

示例:

git tag -a v1.2 9fceb02 -m "Message here"

其中9fceb02是提交ID的开头部分。

然后,您可以使用git push origin v1.2推送标签。

您可以执行git log来显示当前分支中的所有提交ID。

在Pro Git书中也有关于标签的很好的一章。

警告:这将创建带有当前日期的标签(例如,该值将显示在GitHub发布页面上)。如果您希望标签的日期与提交日期相同,请查看另一个答案

只是代码

# Set the HEAD to the old commit that we want to taggit checkout 9fceb02
# temporarily set the date to the date of the HEAD commit, and add the tagGIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" \git tag -a v1.2 -m"v1.2"
# push to origingit push origin --tags
# set HEAD back to whatever you want it to begit checkout master

详情

@dkinzer的答案创建的标签的日期是当前日期(当您运行git tag命令时),没有是提交日期。tag的Git帮助有一个第"关于回溯标签"节,上面写着:

如果您从另一个VCS导入了一些更改,并希望为您的工作的主要版本添加标签,那么能够指定嵌入标签对象的日期是很有用的;标签对象中的此类数据会影响,例如,gitweb界面中标签的排序。

要设置未来标记对象中使用的日期,请设置环境变量GIT_COMMITTER_DATE(请参阅后面对可能值的讨论;最常见的形式是“YYYY-MM-DD HH: MM”)。

例如:

$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1

页面"如何在Git中标记"向我们展示了我们可以通过以下方式提取HEAD提交的时间:

git show --format=%aD  | head -1#=> Wed, 12 Feb 2014 12:36:47 -0700

我们可以通过以下方式提取特定提交的日期:

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \git tag -a v1.2 9fceb02 -m "v1.2"

但是,与其重复两次提交,似乎更容易将HEAD更改为该提交并在两个命令中隐式使用它:

git checkout 9fceb02
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"

最简单的方法是:

git tag v1.0.0 f4ba1fcgit push origin --tags

f4ba1fc是您要标记的提交哈希的开头,v1.0.0是您要标记的版本。

这是一个老问题,答案已经给出了所有的工作,但也有一个新的选择可以考虑。

如果您使用SourceTree来管理您的git存储库,您可以右键单击任何提交并向其添加标签。使用另一个Mooseclick,您还可以将标签直接发送到源分支。

好的,你可以简单地做:

git tag -a <tag> <commit-hash>

因此,如果您想将标签: 1.0.2添加到提交e50f795,只需执行以下操作:

git tag -a 1.0.2 e50f795

同样,你在最后添加消息,使用-m,像这样:

git tag -a 1.0.2 e50f795 -m "my message"

毕竟,您需要将其推送到remote,要做到这一点,只需执行以下操作:

git push origin 1.0.2

如果你有很多标签,你不想一个接一个地提到它们,只需这样做:

git push origin --tags

把所有标签放在一起…

此外,我在下图中创建了步骤,以进一步澄清步骤:在提交哈希上创建标签

您还可以在Hub中使用dd标记或使用资源树等工具,以避免前面的步骤,在这种情况下,我登录到我的比特桶并从那里执行:

  1. 转到您的分支并找到要添加标签的提交并单击它:

在比特桶中找到你的提交

  1. 提交页中,在右边,找到它说No tags的地方,然后单击+图标:

找到没有标签的地方

  1. 在标签名称框中,添加您的标签:

添加标签名称

  1. 现在您可以看到标签已成功创建:

在此处输入图片描述

基于其他人的答案,这里有一个单行解决方案,它将标记日期设置为实际发生的时间,使用带注释的标记并且不需要git checkout

tag="v0.1.3" commit="8f33a878" bash -c 'GIT_COMMITTER_DATE="$(git show --format=%aD $commit)" git tag -a $tag -m $tag $commit'git push --tags origin master

其中tag设置为所需的标记字符串,commit设置为提交哈希。

@Phrogz的回答很棒,但在Windows上不起作用。以下是如何使用Powershell用提交的原始日期标记旧提交:

git checkout 9fceb02$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1git tag v1.2git checkout master

要为特定提交制作标签,请先打印提交id以查看要向其添加标签的提交

git log --online

输出会喜欢这个

dee93fc update App.jsc691fa2 autherization to roles559528a modify depart6aa4ad4 edit project page

选择要添加标签的提交ID,并为提交ID进行git签出

git checkout 6aa4ad4

并为该提交添加标签

git tag v1.0

做了这个标记后回到你的树枝

git checkout branchName

查看所有标签

git tag