在具有多个标记的提交中显示最新标记

tha*_*hgr 5 git git-tag

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

git branch用来显示当前存储库中签出的分支或标记.这在大多数情况下都可以正常工作,除非在同一个提交中有多个标记,导致在该提交中打印一个随机标记.

我怎样才能解决这个问题?我应该以不同的方式实现它吗?

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

所以,让我说我运行./checkoutAll feat1 origin/feat1 tags/ALL7 但是ALL7标签与同一个提交ALL6, git branch显示ALL6而不是ALL7我特别要求结帐.

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

在此输入图像描述

所以,让我说我运行git checkout tags/V9.00.00.ALL.04 然后git branch显示一个随机标签(* detached from ..)的存在,在这个例子中7.有没有办法显示最新的?或至少显示我要求结账的那个(即使ALL7与ALL9相同)?

jwe*_*ich 3

目前尚不清楚您想在哪里显示这些标签,但让我尽力帮助您。

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

git rev-parse HEAD
Run Code Online (Sandbox Code Playgroud)

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

git show-ref --tags --dereference
Run Code Online (Sandbox Code Playgroud)

现在我们都拥有了,我们可以将它们匹配以打印/显示您所要求的内容。例如:

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' ' '
Run Code Online (Sandbox Code Playgroud)

或者单行:

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