git中,如何撤销本地删除未推送的注解标签?

In git, how can I undo the local deletion of an annotated tag that has not been pushed?

我不小心在本地删除了一个我不打算删除的带注释的标签。我还没有将标签的删除推送到远程。我想撤销这个错误。

$ git tag -n999
v1.0.0          Initial release

$ git tag -d v1.0.0
Deleted tag 'v1.0.0' (was 1a2b3c4)

我在网上和此处的 Stack Overflow 上进行了搜索,试图找到解决方案。尽管此操作看似简单,但我一直没有找到解决方案。

如何撤消本地标记删除,将标记恢复到删除前的状态?

仅供参考,在回答这个问题之前我从来没有这样做过。

但是在谷歌搜索你的问题后,我发现了这篇文章:

https://dzone.com/articles/git-tip-restore-deleted-tag

我测试了它的建议,它对我有用。


总结:

使用它来获取已删除的注释标签对象列表:

git fsck --unreachable | grep tag

# if don't have grep because you're on windows, you can use this:
git fsck --unreachable | sls tag

使用此命令检查上一个命令的结果:

git show KEY

使用这个来恢复标签:

git update-ref refs/tags/NAME KEY
$ git tag -d v1.0.0
Deleted tag 'v1.0.0' (was 1a2b3c4)
$

删除了本地引用 refs/tags/v1.0.0。把它放回去,

git tag v1.0.0 1a2b3c4

这就是为什么删除提到数据库中的对象 ID。 Git 不会从数据库中清除对象,直到它们通过任何引用无法访问两周或更长时间(比如 git help config 并搜索 gc.*expire),特别是它不会从飞行中的操作、普通错误和重新考虑中抢夺东西。您可以在 任何 对象上挂一个 ref。