Ale*_*x I 3 tags git version-control
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
Run Code Online (Sandbox Code Playgroud)
如何查看特定标签的完整历史记录?(换句话说,任何时候创建/删除具有该名称的标签,以及每个标签指向的提交内容)
如何查看所有标签的完整历史记录?
它们也可以被强制移动:
git tag -f ...
Run Code Online (Sandbox Code Playgroud)
然后用力推动。
如何查看特定标签的完整历史记录?(换句话说,任何时候创建/删除具有比名称的标签,以及每个指向的提交内容)
一般来说,你不能。
如果标签被强制移动和强制推送,并且您保留标签的引用日志,则可以从标签的引用日志中检索以前的值,直到这些引用日志条目过期。但是,删除引用(任何引用)会删除引用日志。
带注释的标签使用存储库中的对象(除了引用本身)。删除引用只会删除对带注释的标记对象的外部标记名引用。只要底层对象本身没有被移除,就可以通过ID访问它。但是,作为未引用的对象,它受通常的垃圾收集规则的约束。只有当一些额外的引用(通常是另一个带注释的标签的另一个标签名称)保持原始的带注释的标签对象可达时,它才能保证保留在存储库中。
(没有根本原因树对象不能指向标记对象,因此有可能有一个提交对象指向一棵树,该树保留旧的带注释的标记。但 Git 不是为此而构建的,并且没有工具用于构建这样的东西,并且可能git fsck会认为它们是错误的。所以这更像是一种理论练习:理论上可以通过特殊提交来保存和持久化“旧标签”和“标签历史”,可能指向通过一个新的引用命名空间,例如refs/tagarchive/,如果至少编写了一个 Git 管道命令和几个脚本。当然,在有人编写这些之前,这都是纯粹的猜测。目前也不清楚它们有什么用处。)