今天,我在查看一个项目的日志,发现我在前段时间发现了一个标签名。有什么方法可以重命名标记吗?谷歌没有发现任何有用的东西。
我意识到我可以检查标记的版本并制作一个新的标记,我甚至尝试过。但这似乎创建了一个不太正确的标记对象。例如,
git tag -l
列出了它相对于所有其他标记的顺序。我不知道这是否有意义,但这让我相信新的标记对象并不是我想要的。我可以接受这一点,因为我真的只关心标记名是否与文档匹配,但我宁愿“正确”地做,假设有正确的方法可以做到这一点。
今天,我在查看一个项目的日志,发现我在前段时间发现了一个标签名。有什么方法可以重命名标记吗?谷歌没有发现任何有用的东西。
我意识到我可以检查标记的版本并制作一个新的标记,我甚至尝试过。但这似乎创建了一个不太正确的标记对象。例如,
git tag -l
列出了它相对于所有其他标记的顺序。我不知道这是否有意义,但这让我相信新的标记对象并不是我想要的。我可以接受这一点,因为我真的只关心标记名是否与文档匹配,但我宁愿“正确”地做,假设有正确的方法可以做到这一点。
当前回答
对于冒险者,只需一个命令即可完成:
mv .git/refs/tags/OLD .git/refs/tags/NEW
其他回答
最初的问题是如何重命名标记,这很简单:首先创建NEW作为OLD:git标记NEW OLD的别名,然后删除OLD:git-tag-d OLD。
关于“Git方式”和(in)理智的引用是不正确的,因为它是在谈论保留标记名,但使其引用不同的存储库状态。
对于冒险者,只需一个命令即可完成:
mv .git/refs/tags/OLD .git/refs/tags/NEW
作为对其他答案的补充,我添加了一个别名,用更熟悉的*nixMove命令感觉一步完成所有操作。参数1是旧标记名,参数2是新标记名。
[alias]
renameTag = "!sh -c 'set -e;git tag $2 $1; git tag -d $1;git push origin :refs/tags/$1;git push --tags' -"
用法:
git renametag old new
这个wiki页面有一个有趣的单行线,它提醒我们可以推送几个参考:
git push origin refs/tags/<old-tag>:refs/tags/<new-tag> :refs/tags/<old-tag> && git tag -d <old-tag>
并要求其他克隆器执行git pull-prune标记
因此,我们的想法是:
<new tag>对于<old tag>:refs/tags/<old tag>:refs/tags/<new tag>引用的每个提交,删除<旧标签>::refs/tags/<旧标签>
请参见示例“更改git存储库中标记的命名约定?”。
对于一个或几个标记,请遵循三步方法。
步骤1:确定当前标记所指向的提交的提交/对象ID
command: git rev-parse <tag name>
example: git rev-parse v0.1.0-Demo
example output: db57b63b77a6bae3e725cbb9025d65fa1eabcde
步骤2:从存储库中删除标记
command: git tag -d <tag name>
example: git tag -d v0.1.0-Demo
example output: Deleted tag 'v0.1.0-Demo' (was abcde)
步骤3:创建一个新标记,该标记指向与旧标记所指向的提交id相同的提交id
command: git tag -a <tag name> -m "appropriate message" <commit id>
example: git tag -a v0.1.0-full -m "renamed from v0.1.0-Demo" db57b63b77a6bae3e725cbb9025d65fa1eabcde
example output: Nothing or basically <No error>
一旦本地git准备好标记名更改,这些更改就可以被推回到原始位置,以便其他人接受:
command: git push origin :<old tag name> <new tag name>
example: git push origin :v0.1.0-Demo v0.1.0-full
example output: <deleted & new tags>