有没有一种方法可以在Git中显示最后N个标签?
我不想使用模式,因为这可能会发生变化。例如,假设我有这些标签,我想获取其中的最后3个:
v1.0.0
v1.0.1
v2.0.0
v2.1.0
v3.0.0
根据Pro Git的说明,似乎无法实现这一点。或者我有什么遗漏吗?
git tag --sort
选项来完成。-
来获取反向排序顺序(默认为从旧到新)。<number>
。
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.
git tag --sort=-version:refname | Select -First <number>
(关于 Select
命令的信息可以在 serverfault 上找到)
--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.
这个没有单独的命令。你需要使用describe
和rev-list
命令的组合来实现。
git describe --tags $(git rev-list --tags --max-count=3)
这可以通过以下方式完成:
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可能适用于实际用例,但它实际上并不针对问题。 它实际上按字典顺序而不是按时间顺序排序标记。
--all
参数,可以查看整个代码库的完整提交历史。 - undefinedgit ls-remote -tq --sort=-version:refname origin | egrep -v '\^\{}$' | head -n <number>