【问题标题】:git delete remotes: remote refs do not existgit delete remotes:远程引用不存在
【发布时间】:2015-11-15 19:09:42
【问题描述】:

简而言之;

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

更多背景;

我有一个 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 告诉命令排除 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 来清理丢失的引用。这无济于事,因为所有这些遥控器都存在。

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

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

我想我错过了一些小东西。每次我对此进行研究时,似乎我都正确地执行了此操作,但是我遇到了上述错误。

【问题讨论】:

    标签: git git-remote


    【解决方案1】:

    使用sed 删除“origin/”部分并更改一个lttile xargs 部分。

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

    【讨论】:

      【解决方案2】:

      这些分支是否从远程(原点)中删除?如果是,你可以简单地做

      git fetch --prune origin
      

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

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

      git push origin --delete myBranch-1234
      

      但是你正在做类似的事情

      git push origin --delete origin/myBranch-1234
      

      【讨论】:

      • 原点没有删除任何分支。我可以结帐其中任何一个。
      • 是的,因为你在第二种情况下执行了不同的命令。
      • 我不明白你的意思。我知道我正在使用两个不同的命令。第二种情况是使用git branch -r --merged 获取所有合并的遥控器,然后我尝试使用xargs git push origin --delete 删除它们。该命令正在尝试删除遥控器,但它认为remote ref does not exist
      • 在您的第二个管道命令中,将 echo 放在 xargs 旁边以查看实际执行的内容。
      • @Jqw 您不能在分支名称中包含 origin/ 前缀,因为您正在运行 git push origin,git 已经知道您正在使用 origin 的分支。 Mykola 的建议是将命令的最后一部分设为xargs echo,而不是echo xargs [...]
      【解决方案3】:

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

      git fetch -p origin

      删除前。

      【讨论】:

      • 这为我解决了,谢谢!但是,为什么我在没有--prune 的情况下获取它不更新?在我看来,这很有误导性
      • 只是给通过搜索到达这里的人的注释-虽然这对大多数登陆这里的人来说显然有用,但就原始问题而言实际上并不正确-OP的问题是他的命令不正确在分支名称中包含origin/,如其他答案中所述/已解决。
      猜你喜欢
      • 2016-06-26
      • 2012-07-18
      • 2010-12-29
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      相关资源
      最近更新 更多