为什么 "git describe" 在我干净的 git 回购副本上显示旧标签版本?

Why is "git describe" showing an older tag version on my clean git repo copy?

一些背景:

我目前有两个本地 git 存储库,它们指向同一个 origin/master 项目。我有两个 git 回购协议的原因是我有一个干净的主副本,我可以在需要时使用,还有一个副本是我的沙箱,我可以在其中应用更改、提交等。这可能有点矫枉过正,但是复制本地 git 副本对我个人来说有一些优势。

一位同事最初为 1.0.2 创建了一个轻量级标签,但我们将其删除并重新标记为具有相同编号的注释版本。他们通过 git 推送到远程仓库来提交更改。我在两个本地 git 实例上提取了最新更改。

我们的标签如下:

release-1.0.0
release-1.0.1
release-1.0.2

问题:

这是我想不通的问题。当我 运行 “git describe” 时,我的沙盒存储库显示最新的标签版本 (release-1.0.2)。这是我所期望的。但是,当我执行“git describe”时,我只从中提取的干净的回购副本显示了较旧的标签 (release-1.0.1)。我确认两者都指向原始主机。我做了更多的研究,发现 overstack solution 指向 运行ning "git cat-file -t"。这是我注意到的区别:

git cat-file -t release-1.0.1 --> tag 
git cat-file -t release-1.0.2 --> commit

为什么当我 运行 "git describe" 与我的沙盒存储库不同时,我的干净副本存储库显示的是旧标签版本?如果我在干净的回购副本上 运行“git describe --tags”,我可以确认我可以看到 release-1.0.2 列出。

A co-worker originally created a lightweight tag for 1.0.2, but we deleted it and re-tagged it as an annotated version with the same number. They committed the change via git push to the remote repo. I pulled down the latest changes on both my local git instances.

除非您使用 --tags 标志,否则 git describe 只与 annotated (as opposed to lightweight) 标签有关。在这里,git cat-file 的输出表明您的沙箱存储库中仍然有旧的 release-1.0.2 轻量级标签。问题是,默认情况下,git pull 本身不会获取较新的、带注释的同名标签,并用它覆盖旧的、轻量级的标签。

解决问题,先通过运行ning

删除本地的轻量标签
git tag -d release-1.0.2

在您的沙盒存储库中,然后 运行

git fetch

(或 git pull,如果您知道自己在做什么)。新的 release-1.0.2 注释标签将取代旧的轻量级标签。您可以通过 运行ning git describe

来确保这一点
git cat-file -t release-1.0.2

现在应该输出 tag(不是 commit)。