git中的标签显然可以通过删除它们然后重新标记从一个提交移动到另一个提交。
例如:
git tag -m "Version 1.0" v1.0 abcd123
git push --tags
git tag -d v1.0
git tag -m "Corrected version 1.0" v1.0 1234abc
git push --tags
如何查看特定标记的完整历史记录? (换句话说,任何时候创建/删除具有该名称的标记,以及每个标记提交的内容)
如何查看所有代码的完整历史记录?
答案 0 :(得分:3)
他们也可以通过武力移动:
git tag -f ...
然后用力推。
如何查看特定标记的完整历史记录? (换句话说,任何时候创建/删除名称多于标签的标签,以及每个标签都提交的标签)
一般情况下,你不能。
如果标记被强制移动并强制推送并且您保留标记的reflog,则可以从标记的reflog中检索以前的值,直到这些reflog条目到期为止。但是,删除引用(任何引用)会删除reflog。
带注释的标签使用存储库中的对象(除了引用本身)。删除引用仅删除 对annotated-tag对象的外部标记名称引用。只要尚未删除基础对象本身,您就可以通过ID访问它。但是,作为一个未引用的对象,它受制于通常的垃圾收集规则。只有当一些额外的引用(通常是另一个带注释标记的另一个标记名称)保持原始注释标记对象可访问时,它才能保证保留在存储库中。
(没有根本原因树对象无法指向标记对象,因此可能有一个提交对象指向一个保留旧注释标记的树。但Git不是为了这样做而构建的,并且没有工具来构建这样的东西,git fsck
可能会认为它们是错误的。所以这更像是一个理论练习:理论上可以保存并保留“旧标签”和“标签历史”通过特殊提交,可能通过一个新的引用名称空间指向,如refs/tagarchive/
,如果至少有一个Git管道命令和几个脚本被写入。当然这是纯粹的推测,直到有人写这些。这还不清楚它们如何有用,或者。)