git - 检测本地和远程之间不同步的所有标签

标签 git git-tag

有没有一种简单的方法可以确定我的本地存储库中的哪些标签与远程不同步?不同步是指完全相同的标签名称指向不同的标签在我的本地和远程提交。我能想到的两种结束这种情况的方法可能是:

  1. 某人(或某物)移动了我之前获取的标签。也许它被删除并重新创建,或者它已经存在时被强制创建。 (我知道这是不受欢迎的,但这并不能阻止它发生。)
  2. 我在本地创建了一个标签,然后有人(或其他人)在不同的提交上创建了相同的标签名称,并在我之前将其推出。

这个问题的另一种表达方式可能是:

如果我运行以下命令,我的哪些本地标签将被更新:

git fetch origin --tags --force

更新:基于answer ,这一行应该在 Git Bash 中工作:

diff <(git for-each-ref refs/tags --format="%(objectname)%09%(refname)") <(git ls-remote --tags | grep -v "\^{}")

说明: 该命令列出了您所有的本地标签,并对其进行格式化,使其使用与 ls-remote 相同的格式。 (%09 是制表符。)然后比较两个输出。

最佳答案

仁者见仁,智者见智:使用git ls-remote --tags 将远程的标签转储出来,使用git for-each-ref refs/tags 检查你的本地标签。比较标签的哈希 ID(在 ls-remote 输出中,这是没有 ^{} 后缀的数字;有后缀的,如果有一个,是标签最终目标的哈希 ID)。当名称匹配但哈希 ID 不同时,它们不同步。为此编写一个 shell 脚本会相对简单。

关于git - 检测本地和远程之间不同步的所有标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66212614/

相关文章:

ios - 如何测试我的 podspec 文件而不必一直提交我的更改?

git - 为什么带有 --follow 和 --reverse 的 git log 只返回最后一次提交?

git-merge - 如何将 git 标签合并到分支上

git - 我如何获得所有指向 git 提交的引用?

git pre-push 钩子(Hook),如果是 --tags 则不要运行

git - 错误 : Unable to access jarfile bfg. jar - BFG

git - jenkins:git fetch 返回状态代码 128: "object file ... is empty"

linux - GIT 未在替代用户下运行 -/bin/git :/bin/git: cannot execute binary file

Git描述给不同的标签

php - composer.lock 如何保护你的项目的恶意依赖