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