git push与远程标签同名的本地分支


110

我正试图推动一个新的本地分支机构 product-0.2送到已存在同名标签的远程(但分支本身不存在)

git push -v --tags --set-upstream origin product-0.2:product-0.2 
Pushing to https://****@github.com/mycompany/product.git
error: src refspec product-0.2 matches more than one.
error: failed to push some refs to 'https://****@github.com/mycompany/product.git'

与:

git push origin product-0.2:/refs/heads/product-0.2 

尽管另一种方法可行,例如创建一个分支 product-0.1,然后在其上提交然后应用一个标记product-0.1

有些人通过在本地删除有冲突的标签,然后推送分支,然后检索远程标签来解决此问题,但这似乎既麻烦又容易出错。

如何以最小的麻烦创建分支?

感谢您的输入


1
尝试使用refs/heads/product-0.2:refs/heads/product-0.2,即没有前导斜线,并在本地提供完整的refspec。
knittl

可以尝试git push origin product-0.2:product-0.2
vpatil 2012年

Answers:


162

以下命令应该起作用。

git push origin refs/heads/product-0.2:refs/heads/product-0.2 

16
接受答案,这就是消除歧义的方法。不过,首先不用相同名称的标签和分支会更容易。某些工具(例如SourceTree)将绊倒在上面,您将只能使用命令行作为唯一解决方案的设备。感谢你们!
youri 2012年

2
+1。当您需要消除远程名称的歧义时,也可以使用类似的方法:refs/remotes/remote_name/remote_branch
Kelvin 2012年

1
在不知不觉中已命名为标记的发行版,master并且无法再推送到具有相同名称的分支。 git push origin refs/heads/master做到了这一点(然后我删除了该标签,因此它不再发生)。
tresf

除了最佳做法,您仍然无法将要推送到的分支推送到默认分支。我们如何解决该问题?
Baksteen

如果上述解决方案不起作用,请在卸下远程头之后再进行操作。git push origin --delete refs / heads / BRANCHNAME
独自一人

42

验证哪些标签与您的分支相关联:

git tag

就我而言,我有一个与分支名称相同的标签。删除它有效:

git tag -d [tag-name]

1
工作正常,有一个与我的分支同名的标签。
ChanceVI '18年

20

更改名称。

无论您是在本地还是远程进行操作,都只需更改名称即可。

标记和分支在git中基本上是同一件事:它们表示指向提交的指针。区别在于分支指针在您提交时前进,而标记保持静态。

但是,您可以git checkout在分支或标签上执行。你为什么要和所有这些加倍的名字打架?改变他们。


应该/应该product-0.2.0以“补丁程序级别”的最后一位数字调用标签,但是仍然可以使用命名约定,并且过去在标签之前创建分支时也不会遇到麻烦。
youri 2012年

如果团队已经开始使用该分支,那么重新命名该分支是否完全可行?
svassr 2013年

更改尚未推送的实体的名称。
TheBuzzSaw 2013年

您确定有关此@TheBuzzSaw吗?因为在本地,我可以使用相同的名称同时使用不同的名称。
John John Pichler

1
虽然上面的命令(作为选定的答案)可能已经解决了问题-对git来说是新手,但我既不理解问题,也不了​​解答案。这个答案至少给出a)建议和b)解释-甚至是对未来的建议。我本来会考虑问自己的问题,但是我厌倦了以前已经问过的评论-恕我直言:一个无法理解的问题与初学者的问题不同。但这就是生活;)
Michael Felt

15

如果您要推送与分支名称相同的标签

git push origin tag myTag

3
干得好先生!这应该是公认的答案。总是读长尾巴所以答案
louis_guitton

知道这很有用,但根本无法回答问题。我不会对此予以否决,因为作者强调这是相反的观点,但几乎不能作为答案。
彼得·哈弗森

12

我今天早上试图推送到规范的存储库,并收到以下错误:

$ git push origin master
error: src refspec master matches more than one.
error: failed to push some refs to 'ssh://user@host/srv/git/repo'

发生这种情况是因为我不小心在本地创建了一个主标记:

$ git tag
master
tag1
tag2
tag3
tag4

在本地删除此标签后:

git tag -d master

我能够再次推动。


很好的解释。需要删除本地标签。谢谢!
法老王大厨

5

这失败了:

git push $origin $branch:$branch 

虽然这对我有用:

git checkout $branch
git push $origin HEAD:$branch

1

如果您使用的是源代码树,请遵循以下步骤。

  1. 在标签部分找到分支的标签名称
  2. 单击标签名称删除标签。
  3. 确保选中“从远程删除标签”,然后单击“确定”。

再试一次以推动您的更改。现在这将工作。

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.