如何在Git中标记一个较早的提交?

我们是git的新手,我想在我们的版本库的开头设置一个标签。 我们的生产代码和最初的版本库是一样的,但我们在那之后做了一些提交。 在开始的时候设置一个标签,可以让我们把生产代码回滚到一个已知的、稳定的状态。

那么如何为一个任意的、较早的提交添加标签呢?

对该问题的评论 (3)
解决办法

例子。

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

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

然后你可以用git push origin v1.2来推送该标签。

你可以用git log来显示你当前分支中的所有提交id's。

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

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

评论(6)

只是代码

# 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的帮助有一节"On Backdating Tags"_,其中提到。

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

_要设置未来标签对象中使用的日期,请设置环境变量GIT_COMMITTER_DATE(见后面关于可能数值的讨论;最常见的形式是"YYY-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"
评论(4)

最简单的方法是

git tag v1.0.0 f4ba1fc

其中f4ba1fc是你想标记的提交的哈希值的开头,v1.0.0是你想标记的版本。

评论(0)

使用命令。

git tag v1.0 ec32d32

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

做好后就可以按标签推送了。

git push origin --tags

参考资料。

Git(修订控制)。 如何在GitHub中标记一个特定的先前提交点?][1] 。

[1]: https://www.quora.com/Git-revision-control-How-can-I-tag-a-specific-previous-commit-point-in-GitHub

评论(0)

OK,你可以简单的做。

git tag -a  

因此,如果您想在提交e50f795时添加tag: 1.0.2,只需简单地这样做。

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

来将所有标签推送到一起...

另外,我还创建了下图中的步骤,为了更清楚的说明步骤。 [![在提交哈希上创建标签][1]][1]

</br&gt。 你也可以在Hub或使用SourceTree等工具来dd标签,为了避免前面的步骤,我这次是登录我的Bitbucket,从那里开始做。

  1. 进入你的分支,找到你要添加标签的commit,点击它。

[![在bitbucket中找到你的提交][3]][3] 。

  1. 提交页面,右侧找到写着 "无标签 "的地方,点击 "+"图标。

[![找到写着 "无标签 "的地方][4]][4]

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

  1. 现在你看到标签已经成功创建。

[![在此输入图像描述][6]][6]

[1]: https://i.stack.imgur.com/7qLil.png [2]: https://i.stack.imgur.com/qFR88.png [3]: [3]:https://i.stack.imgur.com/cBmXr.png [4]: https://i.stack.imgur.com/Nd7nE.png 5:

[6]: https://i.stack.imgur.com/bBf69.png

评论(0)

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

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

评论(0)

在其他人回答的基础上,这里有一个单行本的解决方案,它将标签日期设置为实际发生的时间,使用注解标签,并且不需要 "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设置为提交哈希。

评论(0)

@Phrogz的答案很好,但在Windows上不起作用。 下面是如何用Powershell来标记一个旧提交的原始日期。

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD |Select -First 1
git标签v1.2
git checkout master
评论(0)