如何列出未按下的Git标签

Ben*_*ngs 21 git git-remote git-tag

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

Ben*_*ngs 29

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

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

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

另一种方法是使用--dry-run/ -nflags来git push:

git push --tags --dry-run
Run Code Online (Sandbox Code Playgroud)

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

  • 因为你正在使用`git ls-remote`的输出来过滤掉`show-ref`,所以留下`^ {}`行没有太大的危害.这让我们稍微简单一些:`git show-ref --tags | grep -v -F"$(git ls-remote --tags origin | cut -f 2)"` (2认同)
  • 这是完全相同的命令,只是用&lt;origin`代替了&lt;&lt; remote name&gt;`。使用它来复制/粘贴:`git show-ref --tags | grep -v -F“ $(git ls-remote --tags origin | grep -v'\ ^ {}'| cut -f 2)”` (2认同)