如何在遥控器上列出所有标签,该标签引用提交或其后代之一?
我正在寻找相当于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没有"远程"标签之类的东西。也就是说,您无法区分仅本地具有的标签和遥控器上或仅存在的标签。