【问题标题】:git push local branch with same name as remote taggit push 与远程标签同名的本地分支
【发布时间】:2015-04-20 15:05:34
【问题描述】:

我正在尝试将一个新的本地分支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

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

如何轻松创建我的分支?

感谢您的意见

【问题讨论】:

  • 尝试refs/heads/product-0.2:refs/heads/product-0.2,即不使用前导斜杠,并在本地提供完整的参考规范。
  • 可以试试 git push origin product-0.2:product-0.2

标签: git git-branch


【解决方案1】:

如果你有一个标签和一个同名的分支并且你试图在没有它们的情况下推送它们,也会发生这种情况。当然,GIT 会一头雾水。

【讨论】:

    【解决方案2】:

    我们的团队需要将本地分支推送到具有相同名称的 TAG 的存储库。

    发生这种情况是因为,ARGO 需要部署 moodle 应用,并且不支持构建 子模块,所以另一个团队创建了一个 TAG,当我们真的需要一个 BRANCH 时。

    步骤:

    1. 从标签中拉取存储库。
    2. git switch -c 分支
    3. git push --set-upstream origin BRANCH

    出现错误:

    错误:src refspec alt_v1.2.2 匹配多个 错误:未能将一些引用推送到“https://gitlab.com/SOME_URL.git”

    解决方案:

    1. git tag -d alt_v1.2.2
    2. git push --set-upstream origin BRANCH

    问题解决了!

    【讨论】:

      【解决方案3】:

      如果您使用的是源代码树,请按照以下步骤操作。

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

      再次尝试推送您的更改。现在这可以工作了。

      【讨论】:

        【解决方案4】:

        如果您尝试推送与分支具有相同名称的 标签

        git push origin tag myTag
        

        【讨论】:

        • 干得好,先生!这应该是公认的答案。总是阅读长尾 SO 答案
        • 知道很有用,但根本不回答问题。我不会反对它,因为作者强调它是相反的,但作为答案很难接受。
        【解决方案5】:

        更改名称。

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

        标签和分支在 git 中本质上是一样的:它们代表一个提交的指针。不同之处在于,当您提交时,分支指针会前进,而标签则保持静态。

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

        【讨论】:

        • 应该/可以使用“补丁级别”的最后一位数字调用标签product-0.2.0,但我们仍然有适当的命名约定,过去我们没有遇到麻烦分支是在标签之前创建的。
        • 如果团队已经开始使用分支,重命名它不是很麻烦吗?
        • 更改尚未推送的实体名称。
        • 你确定这个@TheBuzzSaw 吗?因为在本地,我可以将两者同名,作为不同的东西。
        • 虽然上面的命令(作为选择的答案)可能已经解决了这个问题 - 作为 git 的新手,我既不了解问题也不了解答案。这个答案至少给出了a)建议和b)解释——甚至是对未来的建议。我会考虑问我自己的问题,但我厌倦了之前已经问过的 cmets - imho:一个无法理解的问题与初学者问题不同。但这就是生活;)
        【解决方案6】:

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

        $ 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
        

        我又能推了。

        【讨论】:

        • 很好的解释。需要删除本地标签。谢谢!
        • 如果由于某种原因它匹配多个遥控器,您可以通过以下方式删除标签或头部遥控器: git push origin :refs/tags/tag1
        • 我得到这个错误:main -> refs/heads/main (已经存在)
        【解决方案7】:

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

        git tag
        

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

        git tag -d [tag-name]
        

        【讨论】:

        • 工作正常,有一个与我的分支同名的标签。
        • 我仍然得到这个:提示:更新被拒绝,因为标签已经存在于遥控器中。
        【解决方案8】:

        这失败了:

        git push $origin $branch:$branch 
        

        虽然这对我有用:

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

        【讨论】:

        • ssh: Could not resolve hostname head: nodename nor servname provided, or not known
        【解决方案9】:

        以下命令应该可以工作。

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

        【讨论】:

        • 接受的答案,这是消除歧义的方法。尽管如此,一开始就没有同名的标签和分支要容易得多。一些工具(例如 SourceTree)会偶然发现它,您将只能使用自己的设备,而命令行是唯一的解决方案。谢谢你们!
        • +1。当您需要消除远程名称的歧义时,类似的事情会起作用:refs/remotes/remote_name/remote_branch
        • 在不知不觉中将标记版本命名为 master,并且无法再推送到同名的分支。 git push origin refs/heads/master 成功了(然后我删除了那个标签,这样它就不会发生了)。
        • 除了最佳实践之外,您仍然无法推送您尝试推送到的分支是默认分支。我们如何解决这个问题?
        • 如果以上解决方法都不起作用,请拆下遥控头后再进行。 git push origin --delete refs/heads/BRANCHNAME
        猜你喜欢
        • 2016-04-12
        • 2016-12-07
        • 2012-01-05
        • 2013-07-07
        • 2011-07-26
        • 1970-01-01
        • 2022-11-19
        • 1970-01-01
        相关资源
        最近更新 更多