我们是git的新手,我想在存储库的开头设置一个标签。我们的生产代码与开始的存储库相同,但是从那时起我们就进行了提交。开头的标签将使我们能够将生产“回滚”到已知的稳定状态。
那么如何将标签添加到任意的较早的提交中?
示例:
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。
# 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"部分,其中说:
显示我们可以通过以下方式提取HEAD提交的时间:如果您已从另一个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 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"
最简单的方法是
使用命令:
OK
这是一个老问题,答案已经可以解决所有问题,但是还有一个可以考虑的新选项。
基于其他人的答案,这是一种单行解决方案,它将标签日期设置为实际发生的时间,使用带注释的标签,并且不需要git checkout
:
@ Phrogz的answer很好,但是在Windows上不起作用。以下是使用Powershell使用提交的原始日期标记旧提交的方法: