如何在创建日期之前列出我的Git存储库中的所有标记?

Jon*_*ach 115 git

我需要一些方法来列出我们系统中所有标签的创建日期,但我不确定我是否可以通过git-log获取该数据.想法?

Jos*_*Lee 152

如果它是带注释的标签,您可以使用标签日期:

git for-each-ref --sort=taggerdate --format '%(refname) %(taggerdate)' refs/tags
Run Code Online (Sandbox Code Playgroud)

但如果它是一个轻量级标签,则没有关于它何时被创建的信息(它只是命名一个对象).

  • @DrorCohen的解决方案适用于轻量级标签:http://stackoverflow.com/questions/6900328/git-command-to-show-all-lightweight-tags-creation-dates.粘贴在这里以便于参考:git log --tags --simplify-by-decoration --pretty ="format:%ai%d" (21认同)
  • 真棒.`git for-each-ref --format ="%(taggerdate):%(refname)" - sort = -taggerdate --count = 10 refs/tags`正是我所需要的.谢谢! (10认同)
  • 甚至更清洁:`git for-each-ref --sort = taggerdate --format'%(tag)'` (7认同)
  • 如果需要,可以使用`%(contents)`添加注释,例如`git for-each-ref --sort ='*authordate'--format ='%(taggerdate:short)| %(标签)| %(内容)'refs/tags` (4认同)
  • `--sort=creatordate` 适用于带注释和未注释的标签,但 `--sort=taggerdate` 似乎只适用于带注释的标签。使用 `git version 2.16.3` 测试 (4认同)

Von*_*onC 49

Git 2.8(2016年3月)记录了另一个可追溯到git 1.4.4(2006年10月)的选项.
请参阅Eric Wong()提交的e914ef0(2016年1月5日).(由Junio C Hamano合并- -提交108cb77,2016年1月20日)ele828
gitster

看到新的 Documentation/git-for-each-ref.txt

对于提交和标签的对象,特殊creatordatecreator 领域将对应于相应的日期或名称,电子邮件最新的元组从committertagger依赖于对象类型的字段.
这些用于处理带注释和轻量级标签的混合.

所以使用creatordate标签:

git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }' 
Run Code Online (Sandbox Code Playgroud)

要么:

git tag --sort=-creatordate 
Run Code Online (Sandbox Code Playgroud)

正如我在" 如何按形式rc-XYZW的版本字符串顺序对git标签排序? "中详述的那样,您可以添加排序顺序git tag(自2014年6月起Git 2.0).

该排序顺序包括字段名称(列在其中git for-each-ref) taggerdate.这允许git tag --sort=taggerdate(下面DarVar 提到) 作为一个例子,在repo中它将最后列出标签:
git/gitv2.10.0

v2.9.1
v2.9.2
v2.9.3
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.10.0
Run Code Online (Sandbox Code Playgroud)

默认顺序不是(git tag):

v2.1.2
v2.1.3
v2.1.4
v2.10.0
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.2.0
Run Code Online (Sandbox Code Playgroud)

  • git标签--sort = -creatordate (2认同)

gav*_*koa 33

git log --tags --simplify-by-decoration --pretty="format:%ci %d"
Run Code Online (Sandbox Code Playgroud)

来自(没有日期字段)的输出也很好:

git log --tags --decorate --simplify-by-decoration --oneline
Run Code Online (Sandbox Code Playgroud)

要查看具有依赖项和条带线性提交的完整历史记录(仅限基本事件,如标记和分支/合并):

git log --graph --decorate --simplify-by-decoration --oneline --all
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是按提交日期排序的,而不是按创建标签的日期排序。来自 Josh Lee 的(目前)评分最高的答案按标签创建日期排序。 (2认同)

elb*_*ero 12

这个单行显示日期和标签,没有任何大惊小怪.

git tag --format='%(creatordate:short)%09%(refname:strip=2)'
Run Code Online (Sandbox Code Playgroud)

输出:

2015-04-01  storaged-2.0.0
2015-06-11  storaged-2.1.0
2015-08-06  storaged-2.1.1
...
Run Code Online (Sandbox Code Playgroud)

如果您不喜欢默认情况下标记的排序方式,则可以使用该选项按日期排序--sort=creatordate.有关详细信息,请参阅VonC答案.


Yan*_*aud 11

要根据提交日期对已注释的标签和轻量级标签进行排序,我正在使用:

git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
  sort -n | awk '{ print $4, $3; }' 
Run Code Online (Sandbox Code Playgroud)

此命令将按时间顺序列出每个标记和关联的提交对象ID.


Zam*_*col 10

git tag --sort=-taggerdate
Run Code Online (Sandbox Code Playgroud)

根据手册页,"前缀 - 按值的降序排序".

git tag使用相同的排序键git-for-each-ref,这是键记录的位置.

  • `git --no-pager tag --sort=-creatordate` 似乎更符合我的需要 (2认同)

Dar*_*Var 6

用Git version 2.10.0.windows.1

git tag --sort=taggerdate


Gab*_*les 6

注意:我的git --versiongit version 2.25.1.

对于所有标签的列表-l,每个标签的消息字段最多 99 行 ( -n99),按时间顺序排列,最新标签位于最后,请执行以下操作:

git tag -l -n99 --sort=taggerdate
Run Code Online (Sandbox Code Playgroud)

(我的首选形式)要颠倒时间顺序,将最新的标签放在前面-,在前面添加一个减号( ) taggerdate,如下所示:

git tag -l -n99 --sort=-taggerdate
Run Code Online (Sandbox Code Playgroud)

更进一步:

要也在标签内搜索并仅显示my string名称中包含字符串的标签,请添加'*my string*'到末尾。请注意,星号 ( *) 是搜索模式中的通配符:

git tag -l -n99 --sort=-taggerdate '*my string*'
Run Code Online (Sandbox Code Playgroud)

要仅显示标签名称,而不显示最多 99 行的标签消息,只需删除该-n99部分:

git tag -l --sort=-taggerdate '*my string*'
Run Code Online (Sandbox Code Playgroud)

有关的

  1. 我对如何在 git log 中显示所有标签的回答


小智 5

以下依赖于提交,因此它是否具有提交的日期信息并不重要:

git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac
Run Code Online (Sandbox Code Playgroud)

Josh Lee 上面的答案依赖于标记日期来使订单正确。