我在主分支上创建了一个名为v0.1的标签,如下所示:

git tag -a v0.1

但后来我意识到,在0.1版的master中还需要合并一些更改,所以我就这么做了。但是现在我的v0.1标签被粘在了错误的提交上(引用便利贴的类比)。我希望它卡在主节点上的最近提交上,但它却卡在主节点上的第二个最近提交上。

我如何移动它到最近提交的主?


当前回答

更准确地说,你必须强制添加标签,然后用option——tags和-f push:

git tag -f -a <tagname>
git push -f --tags

其他回答

还有一种方法:

移动标签在远程回购。(如有需要,请更换HEAD。)

$ git push --force origin HEAD:refs/tags/v0.0.1.2

取回更改。

$ git fetch --tags

如果你想移动一个带注释的标签,只改变目标提交,但保留注释消息和其他元数据使用:

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

使用git标记-d <tagname>删除它,然后在正确的提交时重新创建它。

这里我只留下适合我需要的另一种形式的命令。 我想移动一个标记v0.0.1.2。

$ git tag -f v0.0.1.2 63eff6a

Updated tag 'v0.0.1.2' (was 8078562)

然后:

$ git push --tags --force