在`git fetch --prune --tags`之后恢复轻量级标签

时间:2014-02-06 16:18:41

标签: git

我通常使用--prune(实际为-p)和git fetch。几分钟前,我想从远程存储库中获取标签,我做了:

git fetch --prune --tags

然后 facepalm 当我看到:

 x [deleted]         (none)     -> opengl

我的一个名为opengl的本地标记已被删除,我看不到如何恢复它。 trick to restore deleted tags在我的情况下不起作用,因为标记是一个轻量级标记(只是一个引用,而不是标记对象)。

您是否看到了恢复标签的方法?


我使用git版本1.8.3.1。

1 个答案:

答案 0 :(得分:2)

没有简单的方法,因为没有为标记创建的日志,但也许您可以在删除之前找到.git目录的备份。标记将位于备份中的.git/refs/tags/opengl.git/packed-refs中。抓住40个字符的SHA-1,你可以在当前的repo中重新创建它,假设提交没有被垃圾收集(参见下一段)。

如果标记指向未以其他方式引用的提交(以便它现在变得无法访问),git fsck可以找到悬空提交。如果有多个悬空提交,您仍然需要选择正确的提交;如果从某个分支可以访问提交,则不会发现任何有用的内容。但是,如果 现在是悬挂提交,您可能希望尽快恢复标记,以防止git gc垃圾收集它。