git delete remotes:远程引用不存在


107

简而言之;

  • 如何删除远程多个合并的遥控器?

更多背景;

我有一个带有数十个遥控器的git repo,这些遥控器已合并到master中。我可以使用以下方法一次删除这些遥控器:

git push --delete origin myBranch-1234

但是,对于所有遥控器来说,这是一个缓慢而乏味的过程。所以我正在尝试以下命令:

git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete

git branch -r --merged列出所有合并的遥控器。
grep origin告诉命令包括原点。
grep -v master告诉命令排除主服务器。
xargs git push origin --delete告诉命令删除遥控器列表。

总之,我希望这能收集所有合并的遥控器并删除它们。

当我运行上述命令时,对于每个合并的遥控器,我都会收到以下信息:

error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc

但是这些遥控器确实存在,我可以检出每个遥控器。许多站点和人们建议我运行git fetch --prune清理丢失的参考。因为所有这些远程控制器都存在,所以它什么也不做。

所以我问你,亲爱的堆栈交换;

  • 为什么可以删除一个遥控器,但不能删除多个遥控器?
  • 我的命令正确吗?

我想我缺少了一些小东西。每次我研究此问​​题时,似乎都正确地做到了,但是却遇到了以上错误。

Answers:


226

您可能需要先修剪远程分支的本地“缓存”。尝试运行:

git fetch -p origin

删除之前。


2
为我解决了问题,谢谢!但是,为什么不提取时不更新--prune?在我看来,这非常令人误解
dave0688 '18

6
只是给从搜索中到达这里的人提供的便条-虽然这对于大多数登陆此地的人显然是有用的,但实际上对于原始问题而言是不正确的-OP的问题在于,他的命令错误地包含origin/在分支名称中,如所述/在其他答案中解决。
CupawnTae

104

这些分支是否已从远程(来源)删除?如果是,您只需

git fetch --prune origin

否则,即使您在本地删除它们,它们也可能返回。

更新:再次查看您的命令,似乎您在错误地构建它。你可能想要

git push origin --delete myBranch-1234

但是相反,您正在做类似的事情

git push origin --delete origin/myBranch-1234

没有任何分支从源中删除。我可以签出其中的任何一个。
Jqw,2015年

1
是的,因为您在第二种情况下执行了不同的命令。
Mykola Gurov

1
我不明白你的意思。我知道我正在使用两个不同的命令。第二种情况是使用合并所有的遥控器,git branch -r --merged然后尝试使用删除它们xargs git push origin --delete。该命令正在尝试删除远程控制器,除非它认为是remote ref does not exist
Jqw 2015年

1
在第二个管道命令中,将echo放在旁边,xargs以查看实际执行的操作。
Mykola Gurov

2
@Jqw您不能origin/在分支名称上包含前缀,因为git在运行时已经知道您正在使用Origin 的分支git push origin。Mykola的建议是制定命令的最后一部分xargs echo,而不是echo xargs [...]
马修(Matthew)

15

使用sed删除“原点/”部分和改变lttile xargs一部分。

git branch -r --merged | grep origin | grep -v -e master | sed s/origin\\/// |  xargs -I{} git push origin --delete {}
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.