首页 > 解决方案 > 如何在 git 提交之前获取最后一个版本

问题描述

我正在努力获取带有提交 ID 的最后一个标签。git describe --abbrev=0但是,在尝试在 Linux 内核存储库中使用时,我没有看到预期的结果。例如,当我尝试检查之前的最后一个标签c0a333d842ef67ac04adc72ff79dc1ccc3dca4ed时,输出为v5.3-rc1,但似乎v5.4-rc6是正确答案。有没有更好的方法来做到这一点?

$  git describe --abbrev=0 c0a333d842ef67ac
v5.3-rc1

提交: https ://github.com/torvalds/linux/commit/c0a333d842ef67ac04adc72ff79dc1ccc3dca4ed

v5.4-rc6和之间的差异v5.4-rc7(见):sound/soc/sof/debug.cFiles changed

https://github.com/torvalds/linux/compare/v5.4-rc6...v5.4-rc7#diff-5f5c6a0ffc78aedb3e249d53fcdc53297ce5b3035f9481df2ed99a5e4b3367a6

标签: git

解决方案


如果您的意图是针对“包含此特定提交的第一个版本”,您应该查看:

git tag --contains c0a333d842ef67ac

并选择您在那里看到的最低版本。

这是一个更完整的版本,使用选项仅列出按版本名称排序的版本标签:

# --list "v*" : only tags starting with 'v'
# --sort="v:refname" : sort tags as version numbers (not as plain strings)
# -c versionsort.suffix=-rc : add config option 'versionsort.suffix = -rc'
#      so that release candidates are sorted before final versions

$ git -c versionsort.suffix=-rc tag --list "v*" --sort="v:refname" --contains c0a333d842ef67ac
v5.4-rc7
v5.4-rc8
v5.4
v5.5-rc1
v5.5-rc2
v5.5-rc3
...

git describe c0a333d842ef67ac反过来工作:从提交开始c0a33...,在它的一个祖先上看到的最后一个标签是什么?

它将为您提供编写修复程序的版本。


从您的评论中:

您正在寻找不包含该补丁的最新版本。

您可以这样做:

  • 找到包含该补丁的第一个版本(v5.4-rc7,如上)
  • 采用以前的版本:在该提交git describe父级上运行
$ git describe --abbrev=0 v5.4-rc7^
v5.4-rc6

推荐阅读