1162

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

那么如何将标签添加到任意较旧的提交中呢?

4

8 回答 8

1776

例子:

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

9fceb02提交 id 的开始部分在哪里。

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

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

Pro Git 书中也有一章很好的关于标记的章节。

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

于 2010-12-09T23:27:28.277 回答
189

只是代码

# Set the HEAD to the old commit that we want to tag
git checkout 9fceb02

# temporarily set the date to the date of the HEAD commit, and add the tag
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" \
git tag -a v1.2 -m"v1.2"

# set HEAD back to whatever you want it to be
git checkout master

细节

@dkinzer 的答案创建了日期是当前日期(运行git tag命令时)而不是提交日期的标签。Git 帮助tag有一个“关于回溯标签”的部分,其中说:

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

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

例如:

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

“How to Tag in 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"
于 2014-02-13T16:09:24.397 回答
160

最简单的方法是:

git tag v1.0.0 f4ba1fc
git push origin --tags

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

于 2014-06-02T14:30:34.790 回答
56

好的,您可以简单地执行以下操作:

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

因此,如果您想将tag: 1.0.2 添加到 commit 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中添加标签或使用SourceTree等工具,为了避免前面的步骤,我在这种情况下登录到我的Bitbucket并从那里进行操作:

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

在 bitbucket 中找到您的提交

  1. 提交页面的右侧,找到显示的位置No tags并单击+图标:

找到它说没有标签的地方

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

添加标签名称

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

在此处输入图像描述

于 2017-07-08T07:42:13.860 回答
42

使用命令:

git tag v1.0 ec32d32

其中 v1.0 是标签名称,ec32d32 是您要标记的提交

完成后,您可以通过以下方式推送标签:

git push origin --tags

参考:

Git(修订控制):如何在 GitHub 中标记特定的先前提交点?

于 2016-09-21T20:29:08.563 回答
12

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

如果您使用 SourceTree 来管理您的 git 存储库,您可以右键单击任何提交并为其添加标签。再次单击鼠标,您还可以将标签直接发送到原点上的分支。

于 2015-09-15T11:56:03.107 回答
6

在其他人的答案的基础上,这是一个单行解决方案,它将标签日期设置为实际发生的时间,使用带注释的标签并且不需要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

wheretag设置为所需的标记字符串和commit提交哈希。

于 2018-10-07T08:03:10.977 回答
6

@Phrogz的答案很棒,但不适用于 Windows。以下是使用 Powershell 使用提交的原始日期标记旧提交的方法:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
于 2019-02-06T21:24:04.333 回答