我该如何批量删除冗余的远程git分支?

3

我有一个相对较大的来自旧远程仓库的远程分支集合:


$ git branch -r
  guy/feat1
  guy/feat2
  guy/feat3
  guy/feat4
  guy/feat5
  guy/feat6
  guy/feat7
  guy/feat8
  origin/HEAD
  origin/master

是否有一个命令可以删除所有的guy分支?

该存储库不再有guy作为远程存储库。

3个回答

4
git branch -r | grep guy/ | xargs git branch -d

(假设您的输出中没有实际包含$符号...)
(假定您的输出中没有实际包含 $ 符号...)

我接受这个作为正确答案,因为它看起来是有效的。然而,我遇到了更大的麻烦。运行此命令时,我收到了“错误:未找到分支'guy/feat1'”的消息。即使将“-d”更改为“-D”,也没有帮助。最终,以下答案对我有用:https://dev59.com/62gu5IYBdhLWcg3w2ahm#11050880 - eoinoc
1
一种更 Git 的迭代方式是 git for-each-ref --format='%(refname)' 'refs/remotes/guy/*' | xargs git branch -d - kostix

4

您还可以尝试以下方法(来自git remote):

git remote --prune guy

使用:

prune

删除<name>下的所有过时的远程跟踪分支。这些过时的分支已经从<name>引用的远程仓库中删除,但仍然在“remotes/”本地可用。
使用--dry-run选项,报告将要修剪的分支,但不实际修剪它们。
参见“git remote prune和git branch -d -r之间的区别”。
如果guy不再是一个有效的远程仓库,则:
git gc --prune=now

将清理这些分支(以及一些未引用的提交,因此请谨慎使用)
查看更多信息,请参见“如何从Git中删除无效的远程分支引用?”:如果可能的话,通常更安全的方法是使用:git branch -rd guy/badbranch,但如果这不起作用,则git gc --prune=now也可以解决问题。


看起来当guy不再远程可用时,这条命令就不相关了。运行该命令会导致:fatal: 'guy' does not appear to be a git repository. fatal: The remote end hung up unexpectedly。我猜测逻辑是该命令用于检查哪些分支不再存在于该远程仓库中。 - eoinoc
我已经运行了git gc -prune=now。看起来它压缩了仓库,但远程分支还是保留着。 - eoinoc

0
要删除远程分支,您可以使用 git push <remote-repo> :branch-to-delete 注意在branch-to-delete之前有冒号。此外,请参见在git中删除多个远程分支... 这显示了如何构造一个一行代码以一次性删除多个分支。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接