Git 删除远程: 远程参考不存在

简而言之;

  • 如何删除远程多个合并远程?

更多背景资料;

I have a git repo with tens of remotes which have been merged into master. I can delete these remotes one at a time by using:

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告诉命令排除 master。
xargs git push origin --delete tells the command to delete the list of remotes.

总之,我希望这个程序能够收集所有合并的远程并删除它们。

当我运行上述命令时,对于每个合并的远程,我收到如下命令;

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来清理丢失的引用。这没有用,因为所有这些遥控器都存在。

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

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

我觉得我错过了一些小东西。每次我研究这个,似乎我正在做这个正确的,但我得到上述错误。

51506 次浏览

这些分支是否从远程(原始)删除? 如果是,您可以简单地

git fetch --prune origin

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

更新: 再次查看您的命令,看起来您正在错误地构建它

git push origin --delete myBranch-1234

但是你却在做类似于

git push origin --delete origin/myBranch-1234

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

git fetch -p origin

before deleting.

使用 sed删除“起源/”部分,并改变一小部分 xargs

git branch -r --merged | grep origin | grep -v -e master | sed s/origin\\/// |  xargs -I{} git push origin --delete {}