有没有一种简单的方法可以确定本地存储库中哪些标签与远程不同步?不同步是指完全相同的标签名称指向本地与远程上的不同提交。我能想到的两种导致这种情况的方法可能是:
- 有人(或某物)移动了我之前获取的标签。也许它被删除并重新创建,或者它是在它已经存在时被强制创建的。 (我知道这会让人不悦,但这并不能阻止它发生。)
- 我在本地创建了一个标签,然后某人(或某物)在不同的提交上创建了相同的标签名称,并在我之前将其推出。
表达这个问题的另一种方式可能是:
如果我运行以下命令,我的哪些本地标签将被更新:
git fetch origin --tags --force
Update:基于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 脚本相对简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)