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

如何在Git中标记较旧的提交?,git,version-control,git-tag,Git,Version Control,Git Tag,我们是git新手,我想在存储库的开头设置一个标记。 我们的生产代码与开始的存储库相同,但从那时起我们就进行了提交。 开始时的标签将允许我们将生产“回滚”到已知的稳定状态 那么如何将标记添加到任意的旧提交中呢?示例: git tag -a v1.2 9fceb02 -m "Message here" 其中9fceb02是提交id的开始部分 然后可以使用git push origin v1.2推送标签 您可以执行git log以显示当前分支中的所有提交id 在ProGit的书中也有一个很好的章节

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

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

示例:

git tag -a v1.2 9fceb02 -m "Message here"
其中
9fceb02
是提交id的开始部分

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

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

在ProGit的书中也有一个很好的章节

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

仅查看代码
#将头设置为要标记的旧提交
git签出9fceb02
#临时将日期设置为头提交的日期,并添加标记
GIT_提交人_DATE=“$(GIT show--格式=%aD | head-1)”\
git标签-av1.2-m“v1.2”
#回到你想要的样子
切换到主分支
细节 @dkinzer的回答创建的标记的日期是当前日期(当您运行
git-tag
命令时),而不是提交日期。标签的Git帮助有一个部分说明:

如果您已经从其他VCS导入了一些更改,并且希望为您的工作的主要版本添加标记,那么可以指定嵌入标记对象的日期是很有用的;例如,标记对象中的此类数据会影响gitweb界面中标记的顺序

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

例如:

页面显示我们可以通过以下方式提取头部提交的时间:

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"
git show--格式=%aD | head-1
#=>2014年2月12日星期三12:36:47-0700
我们可以通过以下方式提取特定提交的日期:

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"
但是,与其重复提交两次,不如将头部更改为该提交并在两个命令中隐式使用它:

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 v1.0 ec32d32
其中v1.0是标记名,ec32d32是要标记的提交

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

git push origin --tags
参考:


好的,您只需执行以下操作:

git tag -a <tag> <commit-hash>
git tag -a 1.0.2 e50f795
git push origin 1.0.2 
git push origin --tags
您还可以使用
-m
在末尾添加一条消息,如下所示:

git tag -a 1.0.2 e50f795 -m "my message"
毕竟,您需要将其推送到
遥控器
,要做到这一点,只需执行以下操作:

git tag -a <tag> <commit-hash>
git tag -a 1.0.2 e50f795
git push origin 1.0.2 
git push origin --tags
如果您有许多不想一一提及的标签,只需执行以下操作:

git tag -a <tag> <commit-hash>
git tag -a 1.0.2 e50f795
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
    设置为所需的标记字符串,
    commit
    设置为提交哈希

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

    git签出9fceb02
    $env:GIT_COMMITTER_DATE=GIT show--格式=%aD |选择-第一个1
    git标签v1.2
    切换到主分支
    
    您也可以在gitk的右键菜单中执行此操作-如果这是您查找SHA1的方式,则很方便。如果您不想添加消息,请省略
    -a
    -m“Message here”
    部分:
    git tag v1.2 9fceb02
    您可以使用完整的提交ID,太好了。@devius使用
    -a
    -m
    有什么区别。手册页似乎说,当使用
    -m
    时,暗示了
    -a
    git push——tags origin master
    会将本地分支上的所有标记推送到远程。宁愿使用git push origin来推送创建的标记。参考:,@ColonelPanic,你的愿望就是我的命令!如果您使用Github管理发布并关心项目/tags页面上显示的日期,那么设置GIT_提交者_日期尤其重要@ColonelPanic我给了你一个双关语的投票,希望我能给你第二个代码,但是github的明星必须这么做。我来这里寻求帮助,在本地和远程删除一个旧标记,最终发现这很有用,也许它也会帮助其他人:别忘了,因为Git不会在不做特殊事情的情况下推标签。