Я не нашел ни одной команды, которая позволяет получить этот результат, но этот процесс позволяет решить проблему. Считайте, что ref_sha - это хэш коммита, для которого вы хотите найти удаленные теги, ссылающиеся на него, или один из его потомков.
Тэги, имеющиеся на пульте дистанционного управления, могут быть указаны следующей командой.
git ls-remote --tags
Каждая строка вывода будет представлять собой тег. Строка начинается с хэша заостренного объекта, за которым следует путь тега. Если тег указывает на объект аннотированного тега, добавляется вторая строка. За тегом будет следовать^{}, а хеш - это объект, полученный рекурсивным разыменованием хэша предыдущей строки.
Теперь нам нужно извлечь, потому что нам нужно будет выполнить проверку предков.
git fetch
Теперь для каждого тега, указанного на первом этапе, нам необходимо выполнить проверку предка с помощью следующей команды. Пусть rem_sha - это хэш, обозначенный тегом. Если тег указал на объект тега, вы можете использовать этот хэш или хеш-объект с рекурсивно разыменованным объектом. Если вы предоставите хеш объекта аннотированного тега для команды, git будет рекурсивно разыменовывать тег автоматически.
git merge-base --is-ancestor <ref_sha> <rem_sha>
Когда это возвращает 0, это означает, что rem_sha является ref_sha или один из его потомков (эквивалент: ref_sha является rem_sha или предок).
Примечание: мы не могли просто проверить локальные теги после извлечения, поскольку могут быть локальные теги, которые еще не были нажаты.