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