git - 在具有多个标签的提交中显示最新标签

标签 git git-tag

我有一个大型项目的脚本,包含十个存储库,用于检查分支(本地、远程或标签)并最终显示每个存储库中的当前分支。

我使用 git branch 来显示当前版本库中 checkout 的分支或标签。这在大多数情况下工作正常,除非在同一个提交中有多个标签,导致打印该提交中标签的随机标签。

我该如何解决这个问题?我应该以不同的方式实现它吗?

例子

for repo in ...
do
  cd repo
  git checkout $1 || git checkout $2 || git checkout $3 ....
  git branch ##(to verify what happened)
done

假设我运行 ./checkoutAll feat1 origin/feat1 tags/ALL7 但是 ALL7 标记与 ALL6 在同一提交中, git branch 显示 ALL6 而不是我特别要求 checkout 的 ALL7

编辑:下图是为了帮助那些试图帮助我的人,

enter image description here

所以,假设我运行 git checkout tags/V9.00.00.ALL.04 然后 git branch 显示一个随机标签(* 从 .. 中分离出来),在这个例子中是 7。 有没有办法显示最新的?或者至少显示我要求它 checkout 的那个(即使 ALL7 与 ALL9 相同)?

最佳答案

不清楚你想在哪里显示这些标签,但让我试着帮助你。

首先,让我们找到当前分支的最新提交哈希:

git rev-parse HEAD

然后,让我们找到所有标签:

git show-ref --tags --dereference

现在我们有了两者,我们可以匹配它们来打印/显示您要问的内容。例如:

SHA_HEAD=$(git rev-parse HEAD)
ALL_TAGS=$(git show-ref --tags --dereference)
echo "$ALL_TAGS" | awk '/'$SHA_HEAD' refs\/tags\// { print $2 }' | tr '\n' ' '

或者单行:

git show-ref --tags --dereference | awk '/'$(git rev-parse HEAD)' refs\/tags\// { print $2 }' | tr '\n' ' '

关于git - 在具有多个标签的提交中显示最新标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32745152/

相关文章:

Git - 在单个命令中提交和标记

git - "git describe"忽略一个标签

git - 将原点重命名为默认值(git)

git - 如何将目录的子目录添加为 git 子模块?

git - 在比较它们之间的差异后,如何使用旧的 git 标签更新当前的主分支?

github - 使用 GitHub Actions 创建标签而不是发布

git - 在没有git服务器的情况下,git如何进行GC呢?

java - 使用 git 将项目放入存储库

Eclipse Egit 不会在工作区导入存储库

git - 如何通过将标签推送到 github 来触发 Azure 管道中的构建