Git 最新标签和之前标签的区别

Git diff between latest and previous tag

我想像 this one 一样进行比较。

唯一的区别是我不想通知标签名称 'manually' 我希望它们被 git 命令检索。

我知道 git describe --tags returns 我的最新标签。但是上一个呢?如何获得?

基本上我想要的是:

$ git diff $(git_command_to_get_previous_tag) $(git describe --tags)

以及我不想要的:

$ git diff 1.0 2.0

您可以使用以下方式获取最新标签:

git tag --sort version:refname | tail -n 1

而上一个标签使用:

git tag --sort version:refname | tail -n 2 | head -n 1

把它放在一起,你可以用这个得到一个差异:

git diff $(git tag --sort version:refname | tail -n 2 | head -n 1) $(git tag --sort version:refname | tail -n 1)

我需要做同样的事情,但使用 PowerShell 而不是 Bash。不过大体方法是一样的。

获取所有标签以防有新标签:

git fetch --all --tags

使用以下方法获取最新标签:

git tag -l --sort=-version:refname | select -first 1

使用以下方法获取上一个标签:

git tag -l --sort=-version:refname | select -first 2 | select -last 1

放在一起:

git diff $(git tag -l --sort=-version:refname | select -first 1) $(git tag -l --sort=-version:refname | select -first 2 | select -last 1)

我的实际示例用例:

git fetch --all --tags > $null; git diff tags/$(git tag -l --sort=-version:refname v* | select -first 1) tags/$(git tag -l --sort=-version:refname v* | select -first 2 | select -last 1) --name-only | Select-String -Pattern ".*\.xml" | Write-Host

如果有新标签,这将获取所有远程标签,将输出重定向到 $null 以使其不显示,获取以 v 开头的最新标签之间更改的文件列表,然后将文件列表过滤为仅 return 以 .xml

结尾的文件