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

hog*_*olo 876 git version-control git-tag

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

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

dki*_*zer 1406

例:

git tag -a v1.2 9fceb02 -m "Message here"
Run Code Online (Sandbox Code Playgroud)

9fceb02提交ID的开头部分在哪里.

然后你可以使用它们 git push origin v1.2

您可以git log在当前分支中显示所有提交ID.

在Pro Git书中还有一个关于标记的好章节.

警告:这会创建带有当前日期的标记(例如,该值将显示在github发布页面上).如果您希望标签与提交日期一致,请查看另一个答案.

  • 如果你不想添加消息,请忽略`-a`和`-m'消息"`部分:`git tag v1.2 9fceb02` (47认同)
  • 您也可以在gitk的右键菜单中执行此操作 - 如果您正在寻找SHA1的方式,则非常方便. (43认同)
  • @devius使用“-a”和“-m”有什么区别。手册页似乎说使用“-m”时隐含“-a”。 (3认同)
  • **`git push --tags origin master` **会将本地分支上的所有标签推送到远程。最好使用git push origin <tag_name>`**来推送创建的标签。请参阅:/sf/answers/363713941/,https://git-scm.com/book/zh/v2/Git-Basics-Tagging (3认同)
  • 您也可以使用完整的提交ID。 (2认同)

Phr*_*ogz 125

只是守则

# 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
Run Code Online (Sandbox Code Playgroud)

细节

@dkinzer的答案创建的标签的日期是当前日期(运行git tag命令时),而不是提交日期.Git帮助tag有一个"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
Run Code Online (Sandbox Code Playgroud)

该页面中的"如何在Git的标签"告诉我们,我们可以提取头的时间通过提交:

git show --format=%aD  | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700
Run Code Online (Sandbox Code Playgroud)

我们可以通过以下方式提取特定提交的日期:

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"
Run Code Online (Sandbox Code Playgroud)

但是,不是重复提交两次,而是将HEAD更改为该提交并在两个命令中隐式使用它似乎更容易:

git checkout 9fceb02 

GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢帮助脚本在一个命令中执行此操作. (4认同)
  • @ColonelPanic,您的愿望就是我的命令!https://github.com/lucasrangit/git-custom-commands/blob/master/git-backtag (4认同)
  • @ColonelPanic 我给了你一个双关语的赞成票,希望我能给你第二个代码,但 github 明星必须这样做。 (2认同)

Pat*_*NLT 87

最简单的方法是

git tag v1.0.0 f4ba1fc

f4ba1fc是要标记的提交的哈希值的开始,v1.0.0是要标记的版本.


Adr*_*uer 33

使用命令:

git tag v1.0 ec32d32
Run Code Online (Sandbox Code Playgroud)

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

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

git push origin --tags
Run Code Online (Sandbox Code Playgroud)

参考:

Git(版本控制):如何在GitHub中标记特定的先前提交点?


Ali*_*eza 28

好的,你可以简单地做:

git tag -a <tag> <commit-hash>
Run Code Online (Sandbox Code Playgroud)

因此,如果您想要添加标签: 1.0.2来提交e50f795,只需执行以下操作:

git tag -a 1.0.2 e50f795
Run Code Online (Sandbox Code Playgroud)

你也在最后添加一条消息,使用-m如下:

git tag -a 1.0.2 e50f795 -m "my message"
Run Code Online (Sandbox Code Playgroud)

毕竟,你需要将它推到remote,为此,只需:

git push origin 1.0.2 
Run Code Online (Sandbox Code Playgroud)

如果您有许多标签,您不想一个一个地提及它们,只需执行以下操作:

git push origin --tags
Run Code Online (Sandbox Code Playgroud)

把所有标签推到一起......

另外,我创建了下图中的步骤,以便更详细地说明这些步骤: 在提交哈希上创建标记

您也可以在Hub中使用标签或使用SourceTree等工具来避免之前的步骤,在这种情况下我登录到我的Bitbucket并从那里进行操作:

  1. 转到您的分支,找到承诺要在标签添加到并单击它:

在bitbucket中找到你的提交

  1. 提交页面的右侧,找到它所在的位置,No tags然后单击+图标:

找到它所说的没有标签

  1. 在标记名称框中,添加标记:

添加标签名称

  1. 现在您看到标记已成功创建:

在此输入图像描述


Ste*_*ter 11

这是一个老问题,答案已经完成所有工作,但也有一个新的选项可以考虑.

如果您使用SourceTree来管理您的git存储库,您可以右键单击任何提交并向其添加标记.使用另一个鼠标点击,您还可以将标记直接发送到原点上的分支.


cco*_*xtn 9

@Phrogz 的答案很好,但不适用于 Windows 以下是如何使用 Powershell 用提交的原始日期标记旧提交:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
Run Code Online (Sandbox Code Playgroud)


sta*_*son 5

基于其他人的答案,这是一种单线解决方案,可以将标签日期设置为实际发生的时间,使用带注释的标签,并且不需要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
Run Code Online (Sandbox Code Playgroud)

where tag设置为所需的标记字符串和commit提交哈希。


Eng*_*hly 5

要标记特定提交,请首先打印提交哈希值以查看要为其添加标记的提交

git log --oneline
Run Code Online (Sandbox Code Playgroud)

输出如下:

dee93fc update App.js
c691fa2 autherization to roles
559528a modify depart
6aa4ad4 edit project page
Run Code Online (Sandbox Code Playgroud)

选择要添加标签的提交 ID,然后 git checkout 获取提交 ID

git checkout 6aa4ad4
Run Code Online (Sandbox Code Playgroud)

并为该提交添加标签

git tag v1.0
Run Code Online (Sandbox Code Playgroud)

制作此标签后返回您的分支

git checkout branchName
Run Code Online (Sandbox Code Playgroud)

查看所有标签

git tag
Run Code Online (Sandbox Code Playgroud)