【问题标题】:Git says remote ref does not exist when I delete remote branch当我删除远程分支时,Git 说远程引用不存在
【发布时间】:2016-06-26 18:39:54
【问题描述】:

我跑了git branch -a

* master
  remotes/origin/test
  remotes/origin/master

我想删除我的远程分支

我试过了

git push origin --delete remotes/origin/test

我明白了

错误:无法删除 'remotes/origin/test':远程 ref 没有 存在

它怎么不存在?

我做了一个git branch -a,我看到它被列出来了。

我错过了什么吗?

【问题讨论】:

  • git branch -a 将列出本地分支,而不是远程分支。对吗?
  • 它将显示您本地的远程分支。它不会列出所有远程分支。
  • @peterh 在我看来它真的在问“为什么我不能删除远程分支”(可能是当分支已从远程删除但远程引用仍然存在于本地时),因此,不是重复的,但可以使用更清晰的标题
  • 我对标题进行了编辑,希望这更接近问题的意图
  • git fetch --prune

标签: git


【解决方案1】:

这应该会有所帮助:

  1. git fetch
  2. git push origin --delete branchName

【讨论】:

    【解决方案2】:

    对于windows

    git branch --remotes| %{ $_.Trim().Split("/")[1] }| ?{ $_ -ne 'master' } | | ?{ $_ -ne 'otherBranch' } | %{ git push origin --delete $_ }
    

    【讨论】:

      【解决方案3】:

      我遵循poke 的解决方案,最后稍作调整。我的步骤如下
      - git fetch --prune;
      - git branch -a 打印以下内容
          master
          branch
          remotes/origin/HEAD -> origin/master
          remotes/origin/master
          remotes/origin/branch (远程分支移除)
      - git push origin --delete branch
      这里,要删除的分支不是remotes/origin/branch,而是简单的branch。并且分支被移除。

      【讨论】:

      • +1 评论回复:分支名称,我试图删除 origin/branch 而它应该只是 branch
      【解决方案4】:

      对我来说这很有效 $ ▶ git branch -D -r origin/mybranch

      详情

      $ ▶ git 分支 -a | grep 我的分支 遥控器/来源/我的分支

      $ ▶ git 分支 -r | grep 我的分支 起源/分支

      $ ▶ git 分支 开发 * 功能/预部署

      $ ▶ git push origin --delete mybranch 错误:无法删除“mybranch”:远程引用不存在 错误:未能将一些引用推送到 'git@10.102.100.38:config/myrepo.git'

      $ ▶ git branch -D -r origin/mybranch 已删除远程分支 origin/mybranch(原为 62c7421)。

      $ ▶ git 分支 -a | grep 我的分支

      $ ▶ git 分支 -r | grep 我的分支

      【讨论】:

        【解决方案5】:

        鉴于远程分支是 remotes/origin/test,您可以使用两种方式:

        git push origin --delete test
        

        git branch -D -r origin/test
        

        【讨论】:

          【解决方案6】:
          1. 获取远程分支列表
          git fetch # synchronize with the server
          git branch --remote # list remote branches
          
          1. 你应该得到一个远程分支的列表:
          origin/HEAD -> origin/master
          origin/develop
          origin/master
          origin/deleteme
          
          1. 现在,我们可以删除分支了:
          git push origin --delete deleteme
          

          【讨论】:

          • 不,这给出了同样的错误:remote ref does not exist
          【解决方案7】:

          一个方便的单行删除除“master”以外的分支:

          git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}
          

          在执行此操作之前,请确保您了解运行此程序的含义!

          【讨论】:

          • 感谢此代码!这是我测试的唯一 git 代码,用于删除除 master 之外的所有远程分支。
          【解决方案8】:

          在origin中有一个删除分支的快捷方式:

          git push origin :<branch_name>

          这和git push origin --delete <branch_name>是一样的

          【讨论】:

            【解决方案9】:

            命令git branch -a 显示存在于本地存储库中的远程分支。这可能听起来有点令人困惑,但要理解它,您必须了解远程分支与远程存储库中存在的分支之间存在差异。远程分支是映射到远程存储库分支的本地 分支。所以这组远程分支代表了远程仓库的状态。

            更新远程分支列表的常用方法是使用git fetch。这会自动从远程获取更新的分支列表,并在本地存储库中设置远程分支,同时获取您可能丢失的任何提交对象。

            但是,默认情况下,git fetch 不会删除远程分支上不再有对应分支的远程分支。为此,您需要明确修剪远程分支列表:

            git fetch --prune
            

            这将自动摆脱远程不再存在的远程分支。之后,git branch -r 将向您显示远程确实存在的分支的更新列表:以及您可以使用 git push 删除的分支。

            话虽如此,要使用git push --delete,您需要指定远程存储库上的分支名称;不是您的远程分支的名称。因此,要删除分支test(由您的远程分支origin/test 表示),您将使用git push origin --delete test

            【讨论】:

            • 另外git branch -r | grep "origin" 将帮助使用 fork 的大型项目
            • 所以从 git 得到这条消息有两个原因:要么分支已经在服务器上删除,要么你错误地在分支名称前加上了 remotes/origin/。或两者兼而有之。
            • 我想知道为什么当我键入git push origin -d 后跟分支名称的第一个字母时,Git 不会在按 Tab 键时自动完成分支名称。
            • @2540625 因为自动完成不是 Git 命令行程序可以做的事情。不过,有些集成允许您执行此操作,例如 this question 中的说明。不过,这完全取决于您的 shell。
            • 感谢您的提醒。我采用了这样的解决方案,但显然这是某种失败的边缘情况。
            【解决方案10】:
            git push origin --delete origin/test 
            

            应该也可以

            【讨论】:

            • 应该是 git push origin --delete test
            【解决方案11】:

            git branch -a 将列出您本地的分支,而不是远程的分支。

            错误error: unable to delete 'remotes/origin/test': remote ref does not exist 表示您的远程中没有该名称的分支,但该分支存在于您的本地。

            【讨论】:

            • 这很有帮助。它解决了我的删除问题。我想知道为什么“git push --delete origin/test”不起作用,而“git push --delete test”起作用
            【解决方案12】:

            git push origin --delete yourBranch

            【讨论】:

              【解决方案13】:

              remotes/origin/test的意思是你在远程服务器origin中有一个叫test的分支。所以命令是

              git push origin --delete test
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-09-26
                • 2016-07-08
                • 2012-07-18
                • 2013-01-07
                • 2016-02-01
                • 1970-01-01
                • 1970-01-01
                • 2012-08-25
                相关资源
                最近更新 更多