删除远程git分支时“错误:无法推送到不合格的目的地”


139

我正在尝试使用删除远程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

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


您是否尝试过a git fetch来解决是否修复了该不存在的远程名称?您是否尝试过.git\refs\remotes\origin删除my_remote_branch文件,以查看是否足够?
VonC 2012年

做到了,git fetch但这没有帮助。在尝试手动删除文件之前,将尝试搜索更简单的解决方案。
雨果

尝试删除或至少移动该文件:它仅包含该分支尖端的SHA1。
VonC 2012年

45
您必须采取git fetch -p措施摆脱过时的跟踪分支。
Jan Hudec 2012年

Answers:


270

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

不要git fetch -p origin使refs/remotes/origin/my_remote_branch消失,如果它在原产地已被删除。该-p选项告诉fetch删除相应的遥控器中不再存在的任何跟踪分支。默认情况下,它们保持在周围。


12
git fetch -p origin为我修复它。多谢。
redimp 2014年

1
您的回答很棒。简短而实质!
1nstinct 2015年

修剪没有帮助!虽然git push origin --delete origin/feature/x给了我关于不存在ref的错误,git push origin :feature/x但确实删除了该分支。所以我想git push origin --delete <branchName>不应该在branchName(?)中包含origin,但是它是bash完成的,这令人困惑。
2016年

@dashesy,您所处的环境与原始询问者不同。在最初的问题中,问题在于远程分支已经被删除了,大概是其他人删除了,因此只需要本地同步。在删除遥控器时。事实上,命令应该是git push origin --delete feature/x的,因为你给分支的名称在原产地,它并不能有前缀有(这两种形式是同义的,否则无论如何)。
Jan Hudec

@JanHudec很有道理。当使用bash的完整是聪明:不包括origin,但它作为完成origin/branch_name而不是简单地branch_name使用时--delete变种。
2016年

56

发现了清理旧的远程git分支的问题,这可以解决问题

git branch -r -d origin/my_remote_branch

我已经尝试做一个小时左右了,非常感谢!
sebkkom 2014年

这不会删除远程分支。如果您进行git fetch,则会再次看到该分支。它只是将其从本地远程分支列表中删除。
Patrick Desjardins 2014年

2
@PatrickDesjardins确实git push origin :my_remote_branch从远程删除了分支,并将git branch -r -d origin/my_remote_branch其从我的本地远程分支列表中删除了
Hugo

11

尝试删除已删除的远程分支时,我遇到了这个问题。所需要的只是修剪:

git remote prune origin

4

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

选项1

get push origin --delete <branchName>

选项2

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

3
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 Hudec 2014年

你说的对,对,这git push origin :my_remote_branch是正常的方式。这种丑陋和危险的方式是当它不起作用时(例如,由于git配置错误)。
pevik

1

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

只是在区分origin/my-branch-name和添加提示my-branch-name

具体来说,我应该使用:

git push origin :my_remote_branch

代替

git push origin :origin/my_remote_branch

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


1

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

希望对别人有帮助


0

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

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

结果是:error: src refspec branchName matches more than one.我通过运行修复了此问题$git tag -d branchName。之后,我可以将新分支推到上游。


0

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

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.