一些背景:
我目前有两个本地 git 存储库,它们指向相同的源/主项目。我有两个 git 存储库的原因是,我有一个干净的主副本,我可以在需要时使用,还有一个副本,我可以在沙箱中应用更改、提交等。这可能有点矫枉过正,但有一些优点对我个人来说,有一个重复的本地 git 副本。
一位同事最初为 1.0.2 创建了一个轻量级标签,但我们删除了它,并将其重新标记为具有相同编号的带注释版本。他们通过 git Push 将更改提交到远程存储库。我在本地 git 实例上拉下了最新的更改。
我们的标签如下:
release-1.0.0
release-1.0.1
release-1.0.2
问题:
这是我无法弄清楚的问题。当我运行“时,我的沙箱存储库显示最新的标签版本(release-1.0.2)”git describe
“。这是我所期望的。但是,当我执行“时,我只从中提取的干净的存储库副本显示较旧的标签(release-1.0.1)git describe
”。我确认两者都指向起源大师。我做了更多研究,发现了一个堆叠解决方案 https://stackoverflow.com/a/13412713/2532191这让我运行“git cat-file -t”。这是我注意到的差异:
git cat-file -t release-1.0.1 --> tag
git cat-file -t release-1.0.2 --> commit
当我运行“时,为什么我的干净副本存储库显示较旧的标签版本”git describe
“与我的沙箱存储库不同?我可以确认,如果我运行,我可以看到列出的版本 1.0.2”git describe --tags
“在干净的回购副本上。
一位同事最初为 1.0.2 创建了一个轻量级标签,但我们删除了它,并将其重新标记为具有相同编号的带注释版本。他们通过 git Push 将更改提交到远程存储库。我在本地 git 实例上拉下了最新的更改。
除非你使用--tags
flag, git describe
只关心带注释的 https://git-scm.com/book/en/v2/Git-Basics-Tagging#Annotated-Tags(相对于轻的 https://git-scm.com/book/en/v2/Git-Basics-Tagging#Lightweight-Tags)标签。这里,输出git cat-file
表明你仍然有旧的release-1.0.2
沙盒存储库中的轻量级标签。问题是,默认情况下,git pull
它本身不会获取较新的同名带注释标签并用它覆盖较旧的轻量级标签。
要解决该问题,首先通过运行在本地删除轻量级标签
git tag -d release-1.0.2
在您的沙盒存储库中,然后运行
git fetch
(or git pull
,如果你知道自己在做什么)。新的release-1.0.2
带注释的标签将取代旧的轻量级标签。您可以通过运行来确保这一点git describe
or
git cat-file -t release-1.0.2
现在应该输出tag
(not commit
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)