git 多个远程设置,如何删除合并的分支只从一个远程?

iq3niunx  于 2023-03-28  发布在  Git
关注(0)|答案(1)|浏览(111)

我有一个安装了许多远程设备的存储库,因为我们使用的是Forking Workflow
我通常每季度清理一次源仓库中所有合并的分支,但我很难弄清楚如何清理单个远程仓库中的合并分支。

git branch -r --merged <how can i target a specific remote?> |
  grep -v "develop" |
  grep -v "master" |
  grep -v "pr" |
  sed -r 's/(remote1|remote2|remote3|remote4)\///' |
  xargs git push -d origin

这里的想法是列出所有合并的分支,过滤掉developmasterpr并删除origin/,然后删除git push -d
我遇到的问题是我不知道如何只针对特定的远程进行删除。每次运行此命令时,它都会列出每个远程的所有分支。然后运行此命令会输出错误

error: unable to delete '<branch-name>': remote ref does not exist
f87krz0w

f87krz0w1#

由于git branch -r --merged的输出包含了远程名称,因此您可以使用grep(etc)来按远程进行过滤。例如,只查看remote1远程中的那些分支:

git branch -r --merged | grep remote1/

把它和你所拥有的放在一起--并把事情简化一点--我们得到:

git branch -r --merged |
  grep remote1/ |
  grep -vE 'develop|master|pr' |
  sed 's/[^/]*\///' |
  xargs git push -d remote1

如果出现错误,请将xargs替换为echo xargs,这样您就可以在不运行它的情况下看到生成的命令行。

相关问题