2012-02-21 60 views
68

我想一个新的本地分支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 2012-02-21 14:22:47

+0

可以试试git push origin产品-0.2:产品-0.2 – vpatil 2012-02-21 14:48:07

回答

103

以下命令应该可以工作。

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

接受答案,这是消除歧义的方法。尽管如此,首先不要让标签和分支同名。有些工具(例如SourceTree)会偶然发现,您将被留在自己的设备上,命令行是唯一的解决方案。感谢你们! – youri 2012-03-06 17:14:57

+0

Det var sa lite sa :) – ralphtheninja 2012-03-06 21:06:15

+1

+1。当你需要消除远程名称的歧义时,类似的东西可以工作:'refs/remotes/remote_name/remote_branch' – Kelvin 2012-10-17 20:08:07

13

更改名称。无论是在本地还是远程执行,只需更改名称。标签和分支在git中基本相同:它们表示一个提交的指针。区别在于分支指针在您进行提交时会前进,而标记保持静态。但是,您可以在分支或标签上执行git checkout。你为什么要与所有这些翻倍的名字战斗?改变它们。

+0

应该/可以用'补丁级别'的最后一位数字调用标签'product-0.2.0',但是仍然有命名约定,并且我们在过去当分支机构没有遇到麻烦在标签之前创建。 – youri 2012-02-22 08:25:17

+0

如果团队已经开始使用这个分支,那么重命名它会不会有帮助? – svassr 2013-12-10 19:51:27

+0

更改尚未推送的实体的名称。 – TheBuzzSaw 2013-12-10 23:00:29

1

这种失败:

git push $origin $branch:$branch 

虽然这个工作对我来说:

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

验证什么标签与分支相关联:

git tag 

对我来说,我有一个与分支名称相同的标记。删除它的工作:

git tag -d [tag-name] 
3

我试图今早推到一个规范的存储库,并得到了以下错误:

$ git push origin master 
error: src refspec master matches more than one. 
error: failed to push some refs to 'ssh://[email protected]/srv/git/repo' 

这事,因为我不小心在本地创建一个主代码:

$ git tag 
master 
tag1 
tag2 
tag3 
tag4 

一旦我本地删除该标签:

git tag -d master 

我能够再次推动。

+0

好的解释。需要删除本地标签。谢谢! – 2018-03-08 15:27:43