如何在Git中获取最近的标签?
git tag a HEAD
git tag b HEAD^^
git tag c HEAD^
git tag
输出:
a
b
c
我应该编写一个脚本来获取每个标签的日期时间并进行比较吗?
如何在Git中获取最近的标签?
git tag a HEAD
git tag b HEAD^^
git tag c HEAD^
git tag
输出:
a
b
c
我应该编写一个脚本来获取每个标签的日期时间并进行比较吗?
git describe --tags --abbrev=0 # 0.1.0-dev
要获取最新的标签,以及标记对象之上的附加提交数量等更多信息:
git describe --tags # 0.1.0-dev-93-g1416689
为了获得最近的“带注释”的标签:git describe --abbrev=0
git describe
的 man 手册所述:
--abbrev=<n> [...] 当 <n> 设置为 0 时,将不显示长格式,仅显示最近的标签。
- Giorgos Kylafasgit checkout $(git describe --abbrev=0 --tags)
。 - JohnRDOrazio将输出所有分支中最新的已标记提交的标记。
git describe --tags $(git rev-list --tags --max-count=1)
git describe
,它可以实现类似于你所要求的功能。--abbrev=0
选项应返回最接近的带标注的标签。 - Jakub Narębskigit describe --exact-match --abbrev=0
。 - Naftuli Kaygit describe --tags
并比较 GitHub 发布页面上的最新标签。 - Adriano Resende$ git for-each-ref refs/tags --sort=-taggerdate --format='%(refname)' --count=1当然,您可以根据需要更改计数参数或排序字段。看起来您可能想问一个略微不同的问题,但是这个答案符合我的理解。
--sort=-authordate
和 --sort=authordate
产生的标签顺序相同。 - larsks--sort=-taggerdate
。对于标签来说,authordate
和 committerdate
是空的(因此不适用作排序键)。 - larsksgit for-each-ref refs/tags --sort=-taggerdate --format='%(refname:short)' --count=1
这条命令甚至更好 :) - Christophe Eblé--points-at=$SHA
将为您提供提交哈希的标签。 - Ryan这个怎么样?
TAG=$(git describe $(git rev-list --tags --max-count=1))
从技术上讲,它不一定会获取到最新的标签,而是最新的被打了标签的提交,这可能不是你正在寻找的东西。
rev-list
中使用--tags=<pattern>
。例如,获取最后一个版本的标签git describe --tags $(git rev-list --tags='v[0-9].[0-9]*' --max-count=1)
。 - Wironegit describe --tags $(git rev-list --tags --max-count = 1)
- Gianluca Casatidescribe
可能会遇到fatal: no tags can describe
错误。git describe --help
的解释:
如果你想要获取仓库中最新的标签,而不管你所在的分支是否能够到达该标签,通常是因为它不属于当前分支的树,那么这个命令将给出整个仓库中最近创建的标签。该命令找到从某个提交可达的最近的标签。
git tag -l --sort=-creatordate | head -n 1
creatordate
是什么意思,但对我来说committerdate
也可以:git tag -l --sort=-committerdate | head -n1
。 - pawamoy您可以执行以下命令:git describe --tags $(git rev-list --tags --max-count=1)
,详情请参见:如何获取最新的标签名称?
git describe ...
返回了一个早期的标签?!)。 - Jeremy Davis--abbrev=0
的答案,但它们截断了我想要的标签的一部分。 - Luke Davisgit describe --abbrev=0 --tags
如果您没有看到最新的标签,请确保在运行此命令之前已经拉取了远程代码库:
git remote update
git describe --abbrev=0
返回的是 v1.0.0,而不是最新的本地标签,添加 --tags
则可以得到正确的标签。 - Herz3h我不确定为什么没有回答问题所询问的内容,即所有标签(包括未注释的标签)且不带后缀:
git describe --tags --abbrev=0
关于 git,"最近的" 可以有两种含义。
你可能指的是 "哪个标签的创建日期最晚",这里大部分答案都是针对这个问题的。根据你的问题,你需要返回标签 c
。
或者你可能指的是 "哪个标签在开发历史中与某个命名分支最接近",通常是你正在使用的分支 HEAD
。在你的问题中,这将返回标签 a
。
当然,这两个意思可能是不同的:
A->B->C->D->E->F (HEAD)
\ \
\ X->Y->Z (v0.2)
P->Q (v0.1)
假设开发人员在星期一将Z
标记为v0.2
,然后在星期二将 Q
标记为v0.1
。 尽管v0.1
是更近的版本,但从开发历史角度来看,v0.2
更接近HEAD,因为它所在的路径起点更接近HEAD.
通常情况下您可能希望选择第二个答案,即与开发历史更接近的版本。 您可以通过使用git log v0.2..HEAD
等命令查找此信息。 对于每个标签,这会告诉您自v0.2
路径分离以来HEAD上有多少个提交。
以下是一个Python脚本,通过迭代运行此检查并打印出最少提交的标签:
https://github.com/MacPython/terryfy/blob/master/git-closest-tag
git describe
执行略有不同的操作,它从(例如)HEAD开始向后跟踪,以查找位于HEAD历史路径上的第一个标签。 在git术语中,git describe
查找可由HEAD到达的标签。 因此,它将无法找到像v0.2
这样不在HEAD路径上的标签,但是在那里分支的路径。