有没有一种简单的方法可以确定我的本地存储库中的哪些标签与远程不同步?不同步是指完全相同的标签名称指向不同的标签在我的本地和远程提交。我能想到的两种结束这种情况的方法可能是:
- 某人(或某物)移动了我之前获取的标签。也许它被删除并重新创建,或者它已经存在时被强制创建。 (我知道这是不受欢迎的,但这并不能阻止它发生。)
- 我在本地创建了一个标签,然后有人(或其他人)在不同的提交上创建了相同的标签名称,并在我之前将其推出。
这个问题的另一种表达方式可能是:
如果我运行以下命令,我的哪些本地标签将被更新:
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/