如何列出Git仓库中与特定文件版本关联的所有标签
解决Git查询文件历史时展示关联标签的方案
一、列出指定文件每个版本关联的所有标签
你可以通过以下脚本直接得到文件每个blob版本对应的所有标签,替换命令中的<file-path>为你的目标文件路径即可:
git for-each-ref refs/tags --format='%(refname:short) %(objectname)' | while read tag tag_commit; do blob=$(git rev-parse "$tag:<file-path>" 2>/dev/null) [ -n "$blob" ] && echo "$blob $tag" done | sort | awk '{arr[$1] = arr[$1] " " $2} END {for (k in arr) print k ":" arr[k]}'
输出格式为blob哈希: 关联的所有标签,完全匹配你按文件内容版本匹配标签的需求。
二、修改git log命令展示中间标签
你平时用的git log --color --decorate --oneline --graph查看单文件历史时不显示中间标签,是因为git默认会做历史简化,跳过所有没有修改该文件的提交,连带这些提交上的标签也会被隐藏,按下面的方式调整参数即可解决:
- 基础版:保留完整历史,显示所有提交和对应的标签
git log --color --decorate --oneline --graph --full-history -- <file-path> - 精简版:仅保留修改文件的提交和带标签的提交,和GitHub文件历史展示逻辑一致
git log --color --decorate --oneline --graph --full-history --simplify-by-decoration -- <file-path>
如果不需要显示分支、HEAD等装饰,只想显示标签,可以把--decorate换成--decorate-refs=refs/tags/*,输出会更干净。
内容的提问来源于stack exchange,提问作者Trevor
相关产品推荐
相关产品推荐

