git:是否有类似每个分支标签的东西?

标签 git tags git-rebase tagname git-tag

我有一些历史重写要做,为此我想暂时保持我原来的树完好无损。然而,重写的树也应该复制以前使用的标签。是否有比例如更少的手动选项在标签名称前加上分支名称?

最佳答案

不,git 中没有像每个分支标签那样的东西。所有的分支和标签都只是 Git 中的一种引用; ref 只是指向修订历史中特定修订的名称。例如,如果您有 develmaster 分支,以及 v1.0v2.0 标签,则引用看起来像这样:

refs/heads/devel ->  *
                    / \
                   *   * <- refs/heads/master
                   |   |
                   *   *
                    \ /
                     * <- refs/tags/v2.0
                     |
                     *
                     |
                     * <- refs/tags/v1.0
                     |
                     *

如您所见,没有任何东西将这些标签绑定(bind)到任何分支;事实上,所有这些标签都包含在 masterdevel 分支中。通过查看您的 .git 存储库,您可以看到标签的结构真的没有比这更多的了;它只是一个包含 SHA-1 的文件,引用 .git/refs 中的提交,或 .git/packed-refs 中的一行(标签通常位于 packed-refs 因为它们不经常更改,而分支通常是 git/refs 中的单独文件)。

因此,如果您想重写历史并保留旧标签,则必须重写您的标签名称。正如 sehe 指出的那样,这是使用 git filter-branch --tag-name-filter 完成的。 .

关于git:是否有类似每个分支标签的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5703237/

相关文章:

git 未 merge "undeleted"文件

Git:将现有存储库从 PC 移动到服务器,从服务器克隆

javascript - 从 innerHTML 或链接到 wikipedia.com 中删除所有 anchor 标记

git - 如何在 git rebase interactive 之后解释 "deleted by us"

Git:由于 rebase merge ,如果分支等于或落后于主分支,则删除分支?

android - 如何在 git 提交历史记录中删除敏感数据(API_KEY)?

php - 使用 PHP 关闭或修复损坏的 img 标签

sql - 从与另一个表具有相同关系的表中获取字段

git - 我可以重写整个 git 存储库的历史以包含我们忘记的东西吗?

git - 为什么在压榨后错误切换分支?没什么可 promise 的