"Updates were rejected because the tag already exists" 尝试推入 SourceTree 时

"Updates were rejected because the tag already exists" when attempting to push in SourceTree

尝试通过源代码树推送时,出现以下错误:

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags origin refs/heads/master:refs/heads/master 
Pushing to https://user@github.com/repo.git
To https://user@github.com/repo.git
 = [up to date]      master -> master
...
 ! [rejected]        example_tag -> example_tag (already exists)
updating local tracking ref 'refs/remotes/origin/master'
error: failed to push some refs to 'https://user@github.com/repo.git'
hint: Updates were rejected because the tag already exists in the remote.
Completed with errors, see above

据我所知,我没有对此标签进行任何更改。我该如何解决这个问题?

如果您没有对要保留的标签进行任何本地更改,那么您可以删除被拒绝的标签,因为它已经存在(在本例中为example_tag):

  1. 右键单击标签并选择删除它(请务必取消选中 从所有遥控器中删除标签 复选框)。
  2. 选择 Fetch 选项(在本地获取并存储所有标签 not 必须启用)。
  3. 您现在应该拥有刚刚删除的标签,并且尝试 Push 将不再显示该错误消息。

这在 SourceTree 中很常见的原因是因为 推送所有标签 选项默认设置为 on。 (隐藏此错误的另一种方法是取消选中该选项。)

您应该也可以在 git bash 中解决这个问题(单击源代码树 UI 中的“终端”按钮)。类型:

git pull --tags

如果您有冲突的标签,您可以在命令中包含 -f 选项,以使用远程版本覆盖本地冲突标签。

git pull --tags -f

当您确认 git 推送

时,取消选中 UI 底部的 push all tags

确保在按下时取消选中 "Push all tags" 按钮。

git pull --tags 工作得很好,但有时即使使用此命令也会出现错误。示例错误消息:

 ! [rejected]        example_tag      -> example_tag  (would clobber existing tag)

这个可以用命令解决git pull --tags -f

-f代表.

来源:

https://github.com/concourse/git-resource/issues/233

在 SourceTree 中,这似乎有效:

  1. 单击“获取”图标
  2. 选中“获取所有标签”
  3. 点击确定