今天,我在日志中寻找一个项目,并意识到一段时间前我已经用了一个胖胖的标签名。 有什么办法可以重命名标签? Google并未提供任何有用的信息。

我意识到我可以签出加标签的版本并制作一个新标签,我什至尝试了。 但这似乎创建了一个不太正确的标记对象。 一方面

git tag -l

相对于所有其他标签无序列出它。 我不知道这是否有意义,但是这让我相信新的标记对象并不是我想要的。 我可以忍受,因为我真的只在乎标记名称是否与文档匹配,但是我宁愿“正确”地进行操作,前提是有正确的方法。


#1楼

如果已发布,则不能将其删除(也就是说,不必冒被涂焦油和羽毛的危险)。 “ Git方式”是:

理智的事情。 只要承认您搞砸了,并使用其他名称即可。 其他人已经看到了一个标记名,如果您使用相同的名称,则可能是两个人都有“ X版本”,但实际上却有不同的“ X”。 因此,只需将其称为“ X.1”即可完成。

或者,

疯了 您真的也想将新版本称为“ X”,即使其他人已经看到了旧版本。 因此,只需再次使用git-tag -f,就好像您尚未发布旧版本一样。

太疯狂了,因为:

Git不会(也不应该)更改用户背后的标签。 因此,如果有人已经获得了旧标签,那么在您的树上执行git-pull不仅要使他们覆盖旧标签。

如果有人从您那里获得了发行标签,则您不能仅仅通过更新自己的标签来为其更改标签。 这是一个很大的安全问题,因为人们必须能够信任他们的标记名。 如果您真的想做疯狂的事情,则需要认真地做,然后告诉别人您搞砸了。

所有礼貌的手册页 。


#2楼

对于喜欢冒险的人,可以通过以下命令完成:

mv .git/refs/tags/OLD .git/refs/tags/NEW

#3楼

除了其他答案:

首先,您需要构建标记名的别名 ,指向原始提交:

git tag new old^{}

然后,您需要在本地删除旧的:

git tag -d old

然后删除您远程位置上的标签:

# Check your remote sources:
git remote -v
# The argument (3rd) is your remote location,
# the one you can see with `git remote`. In this example: `origin`
git push origin :refs/tags/old

最后,您需要将新标签添加到远程位置。 在完成此操作之前, 不会添加新标签:

git push origin --tags

遍历每个远程位置。

请注意, 更改Git标签对包装的消费者有何影响


#4楼

最初的问题是如何重命名标签,这很容易:首先创建NEW作为OLD的别名: git tag NEW OLD然后删除OLD: git tag -d OLD

关于“ Git方式”和(理智)理智的报价是不合时宜的,因为它是在谈论保留标签名称,但是使其指向不同的存储库状态。


#5楼

这个Wiki页面具有这个有趣的单行代码,它提醒我们可以推送多个参考

git push origin <refs/tags/old-tag>:<refs/tags/new-tag> :<refs/tags/old-tag> && git tag -d <old-tag>

并要求其他克隆者执行git pull --prune --tags

因此,想法是推动:

  • <new-tag>通过引用的每个提交<old-tag >: <refs/tags/old-tag>:<refs/tags/new-tag>
  • 删除<old-tag> :<refs/tags/old-tag>

参见示例“ 在git存储库中更改标签的命名约定? ”。


#6楼

作为其他答案的补充,我添加了一个别名以一步完成所有操作,并具有更熟悉的* nix move命令感觉。 参数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

#7楼

最简单的部分是重命名本地标签。 较难的部分是远程部分。 此技巧背后的想法是将旧标签/分支复制到新标签/分支,然后删除旧标签/分支,而不进行检出。

远程标记重命名/远程分支→标记转换:(注意:refs/tags/

git push <remote_name> <old_branch_or_tag>:refs/tags/<new_tag> :<old_branch_or_tag>

远程分支重命名/远程标记→分支转换:(注意:refs/heads/

git push <remote_name> <old_branch_or_tag>:refs/heads/<new_branch> :<old_branch_or_tag>

输出重命名远程标签:

D:\git.repo>git push gitlab App%2012.1%20v12.1.0.23:refs/tags/App_12.1_v12.1.0.23 :App%2012.1%20v12.1.0.23Total 0 (delta 0), reused 0 (delta 0)
To https://gitlab.server/project/repository.git- [deleted]               App%2012.1%20v12.1.0.23* [new tag]               App%2012.1%20v12.1.0.23 -> App_12.1_v12.1.0.23

#8楼

不管处理推送标签和重命名已经推送的标签有什么问题,如果要重命名的标签是带注释的标签,您都可以通过以下单行命令行首先将其复制:

git tag -a -m "`git cat-file -p old_tag | tail -n +6`" new_tag old_tag^{}

然后,您只需要删除旧标签:

git tag -d old_tag

由于以下两个答案,我找到了此命令行:

  • https://stackoverflow.com/a/26132640/7009806 (第二条评论)
  • https://stackoverflow.com/a/49286861/7009806

编辑:
使用标签自动同步设置fetch.pruneTags=true遇到问题(如https://stackoverflow.com/a/49215190/7009806中所述 ),我个人建议首先在服务器上复制新标签, 然后删除旧标签一。 这样,在删除旧标签时,新标签不会被随机删除,并且标签的同步想要删除服务器上尚未存在的新标签。 因此,例如,我们在一起得到:

git tag -a -m "`git cat-file -p old_tag | tail -n +6`" new_tag old_tag^{}
git push --tags
git tag -d old_tag
git push origin :refs/tags/old_tag

#9楼

对于一个或几个标签,请遵循3步方法。

步骤1:确定当前标签指向的提交的提交/对象ID

     command: git rev-parse <tag name>example: git rev-parse v0.1.0-Demoexample output: db57b63b77a6bae3e725cbb9025d65fa1eabcde

步骤2:从存储库中删除标签

     command: git tag -d <tag name>example: git tag -d v0.1.0-Demoexample 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" db57b63b77a6bae3e725cbb9025d65fa1eabcdeexample output: Nothing or basically <No error>

一旦本地git做好了标记名称更改的准备,就可以将这些更改推回原点,以供其他人使用。


#10楼

这是我将old标签重命名为new标签的方法:

git tag new old
git tag -d old
git push origin :refs/tags/old
git push --tags

push命令中的冒号将从远程存储库中删除标记。 如果您不这样做,当您拉时,Git将在您的机器上创建旧标签。

最后,请确保其他用户删除了已删除的标签。 请告诉他们(同事)运行以下命令:

git pull --prune --tags

请注意, 如果要更改带注释的标记 ,则需要确保新标记名称引用的是基础提交,而不是要删除的旧带注释的标记对象。 因此,请使用git tag -a new old^{}代替git tag new old (这是因为带注释的标签是对象,而轻量级的标签不是对象, 有关此信息,请参阅 )。

如何重命名Git标签?相关推荐

  1. 使用Python重命名MP3标签

    从Window复制MP3文件的到Ubuntu下,MP3标签很多是乱码.于是想自己写个Python程序处理一下. 从酷狗复制过来的音乐文件名都是"作者 - 标题",所以可以通过解析文 ...

  2. 如何重命名本地Git分支?

    我不想重命名远程分支,如重命名本地和远程Git存储库的master分支中所述. 如何重命名尚未推送到远程分支的本地分支? 如果您还需要重命名远程分支: 如何重命名Git本地和远程分支名称 #1楼 gi ...

  3. git tag 标签重命名

    git tag 标签重命名 今天手滑,居然将tag的版本号打错了,偷偷抓紧修改了一下 将v6.2.0重命名为v6.6.2 新版本号:v6.6.2 错误版本号:v6.2.0 参考: https://co ...

  4. R语言图形用户界面数据挖掘包Rattle:加载UCI糖尿病数据集、并启动Rattle图形用户界面、数据集变量重命名,为数据集结果变量添加标签、数据划分(训练集、测试集、验证集)、随机数设置

    R语言图形用户界面数据挖掘包Rattle:加载UCI糖尿病数据集.并启动Rattle图形用户界面.数据集变量重命名,为数据集结果变量添加标签.数据划分(训练集.测试集.验证集).随机数设置 目录

  5. pandas使用rename函数自定义重命名dataframe指定索引标签(位置)的名称(customize rename index value or label)

    pandas使用rename函数自定义重命名dataframe指定索引标签(位置)的名称(customize rename index value or label) 目录

  6. Git查看、删除、重命名远程分支和tag

    本文链接:http://zengrong.net/post/1746.htm 这篇文章记录我在使用git的过程中碰到远程分支和tag的相关内容,提纲: 查看远程分支 删除远程分支和tag 删除不存在对 ...

  7. Git查看、删除、重命名远程分支和tag【转】

    转自:http://zengrong.net/post/1746.htm 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也 ...

  8. 【Android 逆向】IDA 工具使用 ( 重命名函数 | 添加注释 | 添加标签 / 跳转标签 | 代码跳转前进 / 后退 )

    文章目录 一.重命名函数 二.添加注释 三.添加标签 / 跳转标签 四.代码跳转前进 / 后退 一.重命名函数 针对一个 匿名函数 , 在分析函数时 , 可以为匿名函数进行命名 ; 右键点击 函数名 ...

  9. 当git上只做文件大小写重命名的修改时,如何躲坑...

    一. 提交时 假设修改ABC.java为Abc.java. 1.1 如果使用git命令进行仅涉及大小写的重命名 1.1.1 设置git库为大小写敏感(不建议) $ git config core.ig ...

最新文章

  1. python官网下载步骤linux-linux 安装 python 最全教程
  2. 信号分解:双正交、完备性、对偶向量
  3. 【学习笔记】吴恩达机器学习 WEEK 0
  4. java 同步中的线程出现异常会放弃锁吗
  5. 2019ICPC(沈阳) (回文自动机+Palindrome Series优化dp)
  6. 图解Kafka,一看就明白!
  7. 《流浪地球》收益可观 助力北京文化业绩大涨
  8. Oracle 日期时间函数大全
  9. linux查看默认启动服务
  10. React Native 入门第一篇
  11. hibernate还有人用吗
  12. 计算机专业专业课代号408,计算机408有多难
  13. 千图成像python_爬取英雄联盟所有皮肤图片实现千图成像!Python真强!!
  14. VS2017离线安装
  15. 【error】error: failed to push some refs to ‘远程仓库地址‘ git报错解决
  16. ie浏览器java 脚本下载_用IE浏览器时不断出现Java活动脚本功能出错问题
  17. 数据安全合规体系建设白皮书
  18. 大数据 排错日记0004——Unable to check if JNs are ready for formatting
  19. 忘记mysql的root密码啷个办
  20. 床帘机器人_“拉窗帘”机器人惊现中国,而未来中国机器人的发展,绝不止这些...

热门文章

  1. js原生设计模式——3简单工厂模式\简单工厂模式封装简单对象
  2. 算法模板——线段树6(二维线段树:区域加法+区域求和)(求助phile)
  3. PHP安全编程:register_globals的安全性
  4. 读pcap文件,bcp入库,一个小项目的备忘录
  5. HCNA配置浮动静态路由
  6. Create-React-App创建antd-mobile开发环境
  7. 关于NSOperation的几个常见问题
  8. JAVA POI读取Excel中Cell为null的处理
  9. 不得不爱开源 Wijmo jQuery 插件集(10)-【Expander】(附页面展示和源码)
  10. Linux 服务器感染kerberods 病毒