有没有一种简单的方法来确定我本地仓库中哪些标签与远程不同步? 这里的不同步是指相同的标签名称在本地和远程指向了不同的提交。导致这种情况的两种方式可能是:
- 某人(或某些东西)移动了我之前获取的标签。也许它被删除并重新创建,或者当已存在时强制创建。 (我知道这很不好,但这并不能阻止它发生。)
- 我在本地创建了一个标签,然后某人(或某些东西)在我之前在不同的提交上创建了相同的标签名称并将其推送出去。
另一种表述这个问题的方式可能是:
如果我运行以下命令,我的哪些本地标签将被更新:
git fetch origin --tags --force
更新:根据答案,在Git Bash中这个一行命令可以工作:
diff <(git for-each-ref refs/tags --format="%(objectname)%09%(refname)") <(git ls-remote --tags | grep -v "\^{}")
说明:该命令列出所有本地标签,并将其格式化为与ls-remote
相同的格式。(%09是一个制表符)然后比较这两个输出。
<(...)
是 Bash 的语法结构;有些 shell 可能没有它。如果您没有它,则需要创建至少一个临时文件,这很麻烦,因此<(...)
语法更好。 - torek