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

问题描述 投票:865回答:8

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

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

git version-control git-tag
8个回答
1391
投票

示例:

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

9fceb02是提交ID的开始部分。

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

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

Pro Git书中关于tagging的章节也很不错。

警告:这将使用当前日期创建标签(例如,该值将显示在GitHub发布页面上)。如果您希望标签带有提交日期,请查看another answer


122
投票

仅代码

# 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命令时),not提交日期。 tag的Git帮助有一个"On Backdating Tags"部分,其中说:

如果您已从另一个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"

86
投票

最简单的方法是


32
投票

使用命令:


26
投票

OK


10
投票

这是一个老问题,答案已经可以解决所有问题,但是还有一个可以考虑的新选项。


4
投票

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


2
投票

@ Phrogz的answer很好,但是在Windows上不起作用。以下是使用Powershell使用提交的原始日期标记旧提交的方法:

© www.soinside.com 2019 - 2024. All rights reserved.