我在主分支上创建了一个名为v0.1的标签,如下所示:
git tag -a v0.1
但后来我意识到,在0.1版的master中还需要合并一些更改,所以我就这么做了。但是现在我的v0.1标签被粘在了错误的提交上(引用便利贴的类比)。我希望它卡在主节点上的最近提交上,但它却卡在主节点上的第二个最近提交上。
我如何移动它到最近提交的主?
我在主分支上创建了一个名为v0.1的标签,如下所示:
git tag -a v0.1
但后来我意识到,在0.1版的master中还需要合并一些更改,所以我就这么做了。但是现在我的v0.1标签被粘在了错误的提交上(引用便利贴的类比)。我希望它卡在主节点上的最近提交上,但它却卡在主节点上的第二个最近提交上。
我如何移动它到最近提交的主?
当前回答
如果你想移动一个带注释的标签,只改变目标提交,但保留注释消息和其他元数据使用:
moveTag() {
local tagName=$1
# Support passing branch/tag names (not just full commit hashes)
local newTarget=$(git rev-parse $2^{commit})
git cat-file -p refs/tags/$tagName |
sed "1 s/^object .*$/object $newTarget/g" |
git hash-object -w --stdin -t tag |
xargs -I {} git update-ref refs/tags/$tagName {}
}
用法:moveTag <标签到移动> <目标>
上面的函数是通过引用teerapap/git-move-annotated-tag.sh开发的。
其他回答
更准确地说,你必须强制添加标签,然后用option——tags和-f push:
git tag -f -a <tagname>
git push -f --tags
如果你使用github并且想要更改发布(例如你发现创建发布后不提交smth)。你可以使用
git push origin :refs/tags/<tagname>
在这个命令之后,github删除你的标签,你的发布将成为草稿。这意味着您可以重新创建释放并选择提交。您的文件和您的消息将被保存。
如果你想移动一个带注释的标签,只改变目标提交,但保留注释消息和其他元数据使用:
moveTag() {
local tagName=$1
# Support passing branch/tag names (not just full commit hashes)
local newTarget=$(git rev-parse $2^{commit})
git cat-file -p refs/tags/$tagName |
sed "1 s/^object .*$/object $newTarget/g" |
git hash-object -w --stdin -t tag |
xargs -I {} git update-ref refs/tags/$tagName {}
}
用法:moveTag <标签到移动> <目标>
上面的函数是通过引用teerapap/git-move-annotated-tag.sh开发的。
如果期望的最终结果是更新远程上已经存在的标签的内容:
Git checkout <tag_name> 提交您的更改 Git标签-f <tag_name> Git push -f origin <tag_name>
还有一种方法:
移动标签在远程回购。(如有需要,请更换HEAD。)
$ git push --force origin HEAD:refs/tags/v0.0.1.2
取回更改。
$ git fetch --tags