如何在遥控器上列出所有标签,即引用提交或其后代之一



如何在遥控器上列出所有标签,该标签引用提交或其后代之一?

我正在寻找相当于git branch -r --contains <commit>的东西,但仅用于远程标签。

我没有找到一个允许获得此结果的单个命令,但是此过程允许解决问题。考虑一下 ref_sha 是您想要找到引用其远程标签或其后代之一的提交的哈希。

遥控器上存在的标签可以使用以下命令列出。

git ls-remote --tags

输出的每一行将代表标签。一条线从尖的对象的哈希开始,然后是标签路径。如果标签指向注释的标签对象,则将添加第二行。标签路径将随后是 ^{},哈希将是通过递归地递减上一行的哈希来获得的对象的哈希。

现在,我们需要获取,因为我们需要执行祖先检查。

git fetch

现在,对于第一步中列出的每个标签,我们需要使用以下命令进行祖先检查。令 rem_sha 为标签指向的哈希。如果标签指向一个标签对象,则可以使用该标签对象或递归删除的对象哈希。如果将带注释的标签对象的哈希提供给命令,则git将自动递归放置标签。

git merge-base --is-ancestor <ref_sha> <rem_sha>

当返回0时,这意味着 rem_sha is ref_sha 或其后代之一(相当于: ref_sha is rem_sha或祖先)。

注意:获取后我们不能简单地检查了本地标签,因为可能尚未推动本地标签。

afaik没有"远程"标签之类的东西。也就是说,您无法区分仅本地具有的标签和遥控器上或仅存在的标签。

最新更新