如何在git仓库中找到所有分支的最新标记?

时间:2017-11-27 06:15:51

标签: git

我想知道如何在git repo中找到所有分支的最新标记。

我已尝试使用以下命令,但这只会检查当前分支:

git describe --abbrev=0 --tags | sed 's/[^0-9.]*//g'

我想检查所有分支。

1 个答案:

答案 0 :(得分:1)

这是bash中的一个脚本。

#!/bin/bash

#list all the tags 
git for-each-ref --shell refs/tags |
  awk '{
#transform the object name into the commit date as a Unix epoch timestamp 
    "git log -1 --pretty=%cd --date=unix "$1 | getline $1;
#if the tag does not refer to a commit, ignore it
    if($0 ~ /^[0-9a-f]/) print;
#sort by the timestamp reversely, from the youngest to the oldest
  }' | sort -r |
#get the first youngest tag
  head -1 | awk '{print $NF}' |
#get all the tags that point at this tag in case there are multiple youngest tags, 
#with a side effect to remove "refs/tags/"
  xargs -i git tag --points-at {}

单行版本:

git for-each-ref --shell refs/tags | awk '{"git log -1 --pretty=%cd --date=unix "$1 | getline $1;if($0 ~ /^[0-9a-f]/) print;}' | sort -r |head -1 | awk '{print $NF}' | xargs -i git tag --points-at {}

如果您在v2.9.4之前使用Git,请使用--date=iso代替--date=unix。对于--date=iso,可能存在由于时区而无法按预期对时间戳进行排序的错误。但我认为这种情况很少发生。