用Git替换远程标签

azm*_*euk 27 tags git branch

我的"origin"存储库中有一些标签.然后我意识到我需要在其中一个标签上添加一些更改,然后将它们推回到我的存储库中.有没有办法可以一次将现有标签推送到存储库,还是应该先删除标签?

Bij*_*dra 50

这不应该是惯例,但您可以删除标记并将更改推送到远程仓库.

git tag -d tag1
git push origin :refs/tags/tag1
Run Code Online (Sandbox Code Playgroud)

  • 还有`git push --delete origin tag1`。请参阅[此处](/sf/answers/383620471/) (5认同)

Exe*_*ero 33

因此,如果您需要将git 分支(例如:“master )上的标签(例如:"v0.5")移动到不同的提交,可能是更新的提交,那么您可以使用以下选项:-fgit tag

-f
--force

Replace an existing tag with the given name (instead of failing)
Run Code Online (Sandbox Code Playgroud)

您可能希望-f结合使用-a来强制创建带注释的标签而不是未带注释的标签。

例子

  1. 在推送之前删除任何遥控器上的标签

    git push origin :refs/tags/<tagname>
    
    Run Code Online (Sandbox Code Playgroud)

    或者对于我们的例子:

    $ git push origin master :refs/tags/v0.5
    To git@github.com:org_name/repo_name.git
    - [deleted]         v0.5
    
    Run Code Online (Sandbox Code Playgroud)
  2. 替换标签以引用最近的提交(使用 -f 将保存为git tag -d <tagname>本地标签删除步骤)。

    git tag -fa <tagname>
    
    Run Code Online (Sandbox Code Playgroud)

    或者对于我们的例子:

    $ git tag -fa "v0.5" -m "version 0.5"
    Updated tag 'v0.5' (was f55c93f)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将标签推送到远程源

    git push origin --tags
    
    Run Code Online (Sandbox Code Playgroud)

    或者对于我们的例子:

    $ git push origin master --tags
    Counting objects: 1, done.
    Writing objects: 100% (1/1), 196 bytes | 0 bytes/s, done.
    Total 1 (delta 0), reused 0 (delta 0)
    To git@github.com:org_name/repo_name.git
    * [new tag]         v0.5 -> v0.5
    
    Run Code Online (Sandbox Code Playgroud)


som*_*ier 12

假设newtag是新标签,oldtag是旧标签。只需执行以下操作:

# Create new tag that points to the same of old tag
git tag newtag oldtag

# Remove oldtag
git tag -d oldtag

# Remove oldtag in remote machine
git push --delete origin oldtag

# Propapate newtag to remote machine
git push --tags
Run Code Online (Sandbox Code Playgroud)


小智 9

替换标签的更简单方法,也在远程:

git tag -f mytagname
git push -f --tags
Run Code Online (Sandbox Code Playgroud)