如何列出未按下的Git标签

时间:2012-07-03 09:44:42

标签: git git-remote git-tag

我想看看我在本地拥有哪些特定遥控器上没有的标签。我怎样才能做到这一点?我知道我可以git push --tags推动所有这些。但是,如果有一些我不想推的标签,如何确保我没有错过一些呢?

2 个答案:

答案 0 :(得分:24)

您可以使用以下内容查看本地存在但不在指定遥控器中的标记:

git show-ref --tags | grep -v -F "$(git ls-remote --tags <remote name> | grep -v '\^{}' | cut -f 2)"

请注意,git ls-remote会显示带注释的标记及其与^{}指向的提交,因此我们需要删除重复项。

另一种方法是使用--dry-run / -n标记git push

git push --tags --dry-run

这将显示已推送的更改,但实际上不会进行这些更改。

答案 1 :(得分:2)

对于记录,我使用'comm'命令的变体:

comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2)

我在.gitconfig中使用它作为git别名,正确的bash引用如下:

[alias]
    unpushed-tags = "!bash -c \"comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2)\""