【问题标题】:When deleting remote git branch "error: unable to push to unqualified destination"删除远程 git 分支时出现“错误:无法推送到不合格的目的地”
【发布时间】:2023-03-14 01:44:01
【问题描述】:

我正在尝试使用

删除远程 git 分支
git push origin :my_remote_branch

得到:

error: unable to push to unqualified destination: my_remote_branch
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@example.com:/myrepo'

这些是我目前的分支

git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/my_remote_branch

git branch -r --merged
  origin/HEAD -> origin/master
  origin/develop
  origin/master

任何关于我如何摆脱这个分支的想法都将不胜感激。

【问题讨论】:

  • 你试过git fetch看看它是否修复了那个不存在的远程名称吗?您是否尝试进入您的.git\refs\remotes\origin 并删除my_remote_branch 文件,看看是否足够?
  • 做了git fetch 但这没有帮助。在尝试手动删除文件之前,将尝试搜索更直接的解决方案。
  • 尝试删除或至少移动该文件:它仅包含该分支尖端的 SHA1。
  • 您必须执行 git fetch -p 才能摆脱陈旧的跟踪分支。

标签: git


【解决方案1】:

这对我有用: 我在 github UI 上创建了远程分支,然后推送了与它同名的本地分支。如果其他方法不起作用,请尝试一下。 其他方法是在本地创建一个新分支并推送一个空分支,然后选择您的提交并再次推送到您的远程。

【讨论】:

    【解决方案2】:

    对我来说问题是,这是我在 github 上的默认分支。我更改了默认分支,然后删除操作成功。

    希望对某人有所帮助

    【讨论】:

      【解决方案3】:

      尝试以下两个选项强制删除远程分支

      选项 1

      get push origin --delete <branchName>
      

      选项 2

      git fetch -p origin
      git branch -r -d origin/<branchName>
      

      【讨论】:

        【解决方案4】:

        我也有类似的问题。 首先去这个讨论,但是直到看到https://stackoverflow.com/a/32147743/4209849,我才能解决问题。

        它只是添加了一个关于区分origin/my-branch-namemy-branch-name 的提示。

        具体来说,我应该使用:

        git push origin :my_remote_branch
        

        而不是

        git push origin :origin/my_remote_branch
        

        这至少解决了我的问题,希望它也能帮助其他人。

        【讨论】:

          【解决方案5】:

          遇到同样的问题,我手动编辑了我的 ./.git/config 文件以包含:

          [branch "branchName"]
          remote = origin
          merge = refs/heads/branchName
          

          这导致:error: src refspec branchName matches more than one. 我通过运行$git tag -d branchName 修复了这个问题。 之后我能够将新分支推送到上游。

          【讨论】:

            【解决方案6】:

            我在尝试删除已删除的远程分支时遇到了这个问题。所需要的只是一个李子:

            git remote prune origin
            

            【讨论】:

              【解决方案7】:
              git branch -r -d origin/my_remote_branch
              

              对我来说还不够。在我不得不去服务器并直接使用 git 目录(这既危险又丑陋)来删除分支之前:

              ssh mygitserver
              su - git
              cd /home/git/repositories/my_remote_branch.git/
              git  --git-dir=. --work-tree=/tmp/ branch -D my_remote_branch
              

              【讨论】:

              • 这不仅危险和丑陋,而且还错误。一方面,这个问题是关于在远程删除分支时在本地删除分支。另一方面,从远程删除分支只是git push origin :my_remote_branch 的问题。注意冒号。
              • 你说得对,Jan,git push origin :my_remote_branch 是正常的方式。这种丑陋而危险的方式是当它不起作用时(例如,由于 git 配置错误)。
              【解决方案8】:

              refs/remotes/origin/my_remote_branch 存在于您的本地存储库中这一事实并不意味着refs/heads/my_remote_branch 存在于origin 远程存储库中。

              如果 refs/remotes/origin/my_remote_branch 已在原点删除,请执行 git fetch -p origin 以使 refs/remotes/origin/my_remote_branch 消失。 -p 选项告诉 fetch 删除相应遥控器中不再存在的任何跟踪分支;默认情况下,它们被保留。

              【讨论】:

              • git fetch -p origin 为我修复了它。非常感谢。
              • 你的回答太棒了。简短而精髓!
              • 修剪没有帮助!而git push origin --delete origin/feature/x 给了我关于不存在参考的错误git push origin :feature/x 确实删除了分支。所以我猜git push origin --delete &lt;branchName&gt; 不应该在分支名称(?)中包含原点,但它是 bash 完成的,这令人困惑。
              • @dashesy,你的处境与最初的提问者不同。在最初的问题中,问题是远程分支已经删除,可能是由其他人,所以只有本地必须同步。在您删除遥控器时。实际上,命令应该是git push origin --delete feature/x,因为您给出了分支at origin 的名称,并且它确实没有 有那个前缀(这两种形式是无论如何都是同义词)。
              • @JanHudec 是有道理的。使用 : 不包含 origin 时,Bash 完成很聪明,但使用 --delete 变体时,它完成为 origin/branch_name 而不是简单的 branch_name
              【解决方案9】:

              找到问题cleaning up old remote git branches,这成功了

              git branch -r -d origin/my_remote_branch
              

              【讨论】:

              • 我已经尝试了大约一个小时,非常感谢!
              • 这不会删除远程分支。如果你去 git fetch 你会再次看到分支。它只是将其从您的本地远程分支列表中删除。
              • @PatrickDesjardins 完全是 git push origin :my_remote_branch 从远程删除分支,git branch -r -d origin/my_remote_branch 从我的本地远程分支列表中删除它
              猜你喜欢
              • 2012-08-09
              • 2017-07-22
              • 1970-01-01
              • 2022-07-09
              • 2013-01-07
              • 2011-09-10
              • 2016-07-08
              • 2018-12-22
              • 1970-01-01
              相关资源
              最近更新 更多