我有一个大型项目的脚本,包含十个存储库,用于检查分支(本地、远程或标签)并最终显示每个存储库中的当前分支。
我使用 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
。
编辑:下图是为了帮助那些试图帮助我的人,
所以,假设我运行 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/