如何在GIT中显示最近的N个标签

20

有没有一种方法可以在Git中显示最后N个标签?

我不想使用模式,因为这可能会发生变化。例如,假设我有这些标签,我想获取其中的最后3个:

v1.0.0
v1.0.1
v2.0.0
v2.1.0
v3.0.0

根据Pro Git的说明,似乎无法实现这一点。或者我有什么遗漏吗?


AC不正确。请参见:https://dev59.com/1V0a5IYBdhLWcg3wAEo3#74428651 - Johann Chang
4个回答

25
这可以通过 Git v 2.0.0 中引入的 git tag --sort 选项来完成。
注意:我使用减号 - 来获取反向排序顺序(默认为从旧到新)。
用实际的自然数替换 <number>

UNIX、Linux、OS X

git tag --sort=-version:refname | head -n <number>

来自man head

 head [-n count | -c bytes] [file ...]

This filter displays the first count lines or bytes of each of the specified files, or of the standard input if no files are specified. If count is omitted it defaults to 10.

Windows,UNIX方式

  1. 安装Cygwin
  2. 参见UNIX的答案

Windows,本地方式

git tag --sort=-version:refname | Select -First <number>

(关于 Select 命令的信息可以在 serverfault 上找到)

来自 git reference

--sort=<type>

Sort in a specific order. Supported type is "refname" (lexicographic order), "version:refname" or "v:refname" (tag names are treated as versions). The "version:refname" sort order can also be affected by the "versionsort.prereleaseSuffix" configuration variable. Prepend "-" to reverse sort order. When this option is not given, the sort order defaults to the value configured for the tag.sort variable if it exists, or lexicographic order otherwise.


6

1
@nickvolynkin 你说得对。我的回答只是我一直在使用的旧别名。我仍然在使用 msysgit 1.9.5(不支持“--sort”选项)。所以,我想这个答案只适用于还没有升级到 git 2.x 的人们。 - hsirah

0

这可以通过以下方式完成:

Bash

git log --pretty='%(describe:tags=true,abbrev=0)' | uniq | head -n <N>

PowerShell

git log --pretty='%(describe:tags=true,abbrev=0)' | Get-Unique | Select -First <N>

用数字替换<N>

注意:虽然AC可能适用于实际用例,但它实际上并不针对问题。 它实际上按字典顺序而不是按时间顺序排序标记。


这个功能会搜索整个仓库的日志历史记录吗? - undefined
@trebor 在git log命令后添加--all参数,可以查看整个代码库的完整提交历史。 - undefined

0
在一个远程仓库上(使用Nick Volynkin的方法):
git ls-remote -tq --sort=-version:refname origin | egrep -v '\^\{}$' | head -n <number>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接