尝试推入SourceTree时,“由于标记已存在而拒绝更新”


117

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

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

据我所知,我没有对此标签做任何更改。我怎样才能解决这个问题?

Answers:


229

您还应该能够在git bash中解决此问题(在Source Tree UI中单击“ Terminal”按钮)。类型:

git pull --tags

3
我认为这是最好的答案,因为这是阻力最小的途径。
乍得

40
发生冲突时git pull --tags -f,如果您想要的话,您可以覆盖本地的内容
DenLilleMand

2
在SourceTree中,单击“获取”,然后启用“获取所有标签”。那样就可以了。
darkgaze

116

如果尚未对要保留的标签进行任何本地更改,则可以删除被拒绝的标签,因为它已经存在example_tag在这种情况下):

  1. 右键单击标签,然后选择删除它(请确保取消选中从所有遥控器上删除标签”复选框)。
  2. 选择获取选项(在本地获取和存储所有标签不会必须启用)。
  3. 现在,您应该拥有刚刚删除的那个标签,并且尝试“ 推送”将不再显示该错误消息。

之所以在SourceTree中常见是因为默认情况下“ 全部推送标签”选项设置为on。(隐藏此错误的另一种方法是取消选中该选项。)


对我来说,“不必在本地获取和存储所有标签”就是这样做,检查是否导致问题重复发生。
汤姆(Tom)

假设上游(原始)回购是事实的来源,那么此解决方案的破坏性最小,并且可以立即解决问题。
史蒂夫·亨蒂

不幸的是,当您有15个拒绝标签时,1,2和3个步骤可能非常繁琐。是的,禁用“推送所有标签”选项可能是正确的方法。
SagiSergeNadir

27

取消选中 push all tags确认git push后, UI底部的


你是说push all tags
Wodin

大!没有观察到它。谢谢
Meg-90

@Wodin,因此如果您push all tags在用户界面中选中,则会尝试覆盖之前的标记。但你必须取消选中防止重写
的jdev枪

@ JDev-Guns我只是在查询措辞。你原来是这么说的push all TABs。我对SourceTree不熟悉,但我怀疑您的意思TAGs不是TABs
Wodin

@沃丁 我觉得我说的TAGs,但如果我没有,我的意思是说TABs
的jdev-枪支


14

确保在推送时取消选中“推送所有标签”按钮。

在此处输入图片说明


如上所述,如果您在本地添加了新标签,这并不意味着它不会被推送到远程服务器吗?
bytedev

0

是的,的确,确实要先拉标签push --tags。解决了我的问题。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.