某些背景:
我目前有两个本地git repos指向同一个origin / master项目。我有两个git repos的原因是我有一个干净的主副本,我可以随时使用,我可以应用的沙盒中的一个副本更改,提交等等。这可能是矫枉过正,但有一些优点对我个人来说,有一个重复的本地git副本。
一位同事最初为1.0.2创建了一个轻量级标记,但我们将其删除并将其重新标记为具有相同编号的注释版本。他们通过git push将更改提交到远程仓库。我在我的本地git实例中删除了最新的更改。
我们的标签如下:
release-1.0.0
release-1.0.1
release-1.0.2
问题:
这是我无法弄清楚的问题。当我运行" git describe
"时,我的沙盒仓库会显示最新的标签版本(版本-1.0.2)。这是我的预期。但是,当我执行" git describe
"时,我只会从中提取的干净仓库副本显示旧版代码(版本1.0.1)。我确认两者都指向原始主人。我做了一些研究,发现overstack solution指向我运行" 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
"我可以看到发布的1.0.2版本。在干净的回购副本。
答案 0 :(得分:4)
一位同事最初为1.0.2创建了一个轻量级标记,但我们将其删除并将其重新标记为具有相同编号的注释版本。他们通过git push将更改提交到远程仓库。我在我的本地git实例中删除了最新的更改。
除非您使用--tags
标记,git describe
仅关注 annotated (而不是 lightweight )标签。此处,git cat-file
的输出表明您的沙箱仓库中仍有旧的release-1.0.2
轻量级标记。问题在于,默认情况下,git pull
本身不会获取相同名称的较新的带注释标签,并用它覆盖旧的轻量级标签。
要解决此问题,请首先通过运行
在本地删除轻量级标记git tag -d release-1.0.2
在沙箱仓库中,然后运行
git fetch
(或git pull
,如果您知道自己在做什么)。然后,新的release-1.0.2
带注释的标签将取代旧的轻量级标签。您可以通过运行git describe
或
git cat-file -t release-1.0.2
现在应该输出tag
(不是commit
)。