Git说我删除远程分支时远程引用不存在


130

我跑了 git branch -a

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

我想删除我的远程分支

我试过了

git push origin --delete remotes/origin/test

我有

错误:无法删除“远程/来源/测试”:远程引用不存在

它怎么不存在?

我做了一个git branch -a,并且看到了它。

我错过了什么吗?


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

我想所有人。我不确定。
cyber8200 '16

2
它将显示本地的远程分支。它不会列出所有远程分支。

1
@peterh在我看来确实是在问“为什么我不能删除远程分支”(可能是当该分支已从远程删除时,但远程引用仍然存在于本地),因此,不是重复的,但可以更清晰的标题
安德鲁·斯宾塞

1
我对标题进行了编辑,希望它更接近问题的意图
Andrew Spencer

Answers:


259

该命令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的大型项目也将有所帮助
Seraf

因此,从git获取此消息有两个原因:分支已经在服务器上删除,或者您错误地在分支名称前加上remotes/origin/。或两者。
安德鲁·斯宾塞

136

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

git push origin --delete test


13
  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


4

假设远程分支是remotes / origin / test,则可以使用两种方式:

git push origin --delete test

git branch -D -r origin/test

3

I,接着将溶液与端部稍加调整。我的步骤如下
- 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

1

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

该错误error: unable to delete 'remotes/origin/test': remote ref does not exist意味着您的遥控器中没有该名称的分支,但该分支存在于本地。


这很有帮助。它解决了我的删除问题。我想知道为什么'git push --delete origin / test'不起作用,而“ git push --delete test”有效
user10293779

1

方便的单行删除源中除“ master”以外的分支:

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

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


感谢您的代码!这是我测试过的唯一git代码,用于删除除master以外的所有远程分支。
阿尔文

1

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

细节

$▶git branch -a | grep mybranch遥控器/起源/ mybranch

$▶git branch -r | grep mybranch来源/ mybranch

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

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

$▶git branch -D -r origin / mybranch删除了远程分支的origin / mybranch(以前是62c7421)。

$▶git branch -a | grep mybranch

$▶git branch -r | grep mybranch


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.