如何列出未刷过的Git标记

如何列出未刷过的Git标记,git,git-remote,git-tag,Git,Git Remote,Git Tag,我想看看本地有哪些标记在特定的远程设备上不可用。我该怎么做?我知道我可以使用git push--tags来推送所有的标签。但是,如果有一些标记我不想推送,如何确保我没有遗漏一些标记?您可以使用以下内容查看本地存在但不在指定远程位置的标记: git show-ref --tags | grep -v -F "$(git ls-remote --tags <remote name> | grep -v '\^{}' | cut -f 2)" 这将显示哪些更改将被推送,但实际上不会进行这

我想看看本地有哪些标记在特定的远程设备上不可用。我该怎么做?我知道我可以使用git push--tags来推送所有的标签。但是,如果有一些标记我不想推送,如何确保我没有遗漏一些标记?

您可以使用以下内容查看本地存在但不在指定远程位置的标记:

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

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

为了记录,我使用了一个与“comm”命令相关的变体:

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

comm-23因为您使用的是
gitlsremote
的输出从
show ref
中过滤出来,所以保留
^{}
行没有太大的危害。这就给我们留下了一个稍微简单的命令:
git show ref--tags | grep-v-F“$(git ls remote--tags origin | cut-f2)
这是完全相同的命令,只是将
替换为
origin
。使用此选项复制/粘贴:
git show ref--tags | grep-v-F“$(git ls remote--tags origin | grep-v'\^{}'| cut-f2)”
comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2)
[alias]
    unpushed-tags = "!bash -c \"comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2)\""