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

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


例子:

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

# push to origin
git push origin --tags

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

细节

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

If you have imported some changes from another VCS and would like to add tags for major releases of your work, it is useful to be able to specify the date to embed inside of the tag object; such data in the tag object affects, for example, the ordering of tags in the gitweb interface. To set the date used in future tag objects, set the environment variable GIT_COMMITTER_DATE (see the later discussion of possible values; the most common form is "YYYY-MM-DD HH:MM"). For example: $ 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更改为该commit,并在两个命令中隐式地使用它:

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 f4ba1fc
git push origin --tags

f4ba1fc是要标记的提交的散列的开始,v1.0.0是要标记的版本。


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

如果你使用SourceTree来管理你的git仓库,你可以右键单击任何提交并添加一个标签。再点击一次鼠标,你也可以将标签直接发送到原点的分支。


好的,你可以简单地做:

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

所以如果你想添加tag: 1.0.2来提交e50f795,只需简单地做:

git tag -a 1.0.2 e50f795

你还可以在结尾添加一条消息,使用-m,就像这样:

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

毕竟,你需要把它推到遥控器上,要做到这一点,只需做:

git push origin 1.0.2 

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

git push origin --tags

把所有标签放在一起…

此外,我还创建了下图中的步骤,以进一步阐明这些步骤:

你也可以在Hub或使用SourceTree等工具添加标签,以避免前面的步骤,在这种情况下,我登录到我的Bitbucket并从那里做:

去你的分支,找到你想要添加标签的提交,然后点击它:

在提交页面,在右边,找到没有标签的地方,然后点击+图标:

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

现在你可以看到标签已经成功创建:


在其他人的答案的基础上,这里是一个一行程序的解决方案,设置标签日期为实际发生的时间,使用带注释的标签,不需要git签出:

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被设置为所需的标记字符串,并提交到提交散列。


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

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

要标记特定的提交,请先打印提交散列,以查看要向其添加标记的提交

git log --oneline

输出如下所示:

dee93fc update App.js
c691fa2 autherization to roles
559528a modify depart
6aa4ad4 edit project page

选择你想要添加标签的提交id, git checkout为提交id

git checkout 6aa4ad4

并为那个提交添加标签

git tag v1.0

并返回你的分支后,使这个标签

git checkout branchName

查看所有标签

git tag