git delete remotes:远程引用不存在

Jqw*_*Jqw 100 git git-remote

简而言之;

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

更多背景;

我有一个git repo,有几十个遥控器已经合并成了主人.我可以使用以下方法一次删除这些遥控器:

git push --delete origin myBranch-1234
Run Code Online (Sandbox Code Playgroud)

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

git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete
Run Code Online (Sandbox Code Playgroud)

git branch -r --merged列出所有合并的遥控器.
grep origin告诉命令包含原点.
grep -v master告诉命令排除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
Run Code Online (Sandbox Code Playgroud)

然而,这些遥控器确实存在,我可以检查每个遥控器.许多网站和人们建议我运行git fetch --prune以清理丢失的引用.这没有任何作用,因为所有这些遥控器都存在.

所以我问你,亲爱的筹码交换;

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

我想我错过了一些小事.每次我研究这个,似乎我正确地做到了这一点,但我得到了上述错误.

Igo*_*gor 208

您可能需要先修剪远程分支的本地"缓存".试试跑步:

git fetch -p origin

在删除之前.

  • 对于从搜索到达这里的人来说只是一个注释 - 虽然这对于大多数人来说显然是有用的,但就原始问题而言,它实际上并不正确 - OP的问题是他的命令错误地将"origin /"包含在分支中名称,如在其他答案中描述/解决的. (5认同)
  • 那为我解决了,谢谢!但是,为什么在没有 `--prune` 的情况下获取时它不更新?在我看来,这是非常具有误导性的 (2认同)

Myk*_*rov 93

那些分支是从远程(原点)删除的吗?如果是的话,你可以做到

git fetch --prune origin
Run Code Online (Sandbox Code Playgroud)

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

更新:再次查看您的命令,看起来您正在错误地构建它.你可能想要

git push origin --delete myBranch-1234
Run Code Online (Sandbox Code Playgroud)

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

git push origin --delete origin/myBranch-1234
Run Code Online (Sandbox Code Playgroud)

  • 更新潜在问题您的命令 (2认同)
  • @Jqw你不能在分支名称中包含`origin /`前缀,git已经知道你正在使用origin的分支,因为你正在运行`git push origin`.Mykola的建议是制作命令`xargs echo`的最后一部分,而不是`echo xargs [...]`. (2认同)

kos*_*ost 12

使用sed删除"原点/"部分和改变lttile xargs一部分.

git branch -r --merged | grep origin | grep -v -e master | sed s/origin\\/// |  xargs -I{} git push origin --delete {}
Run Code Online (Sandbox Code Playgroud)