Git:删除具有特定模式的所有远程分支

Mob*_*ent 3 git grep xargs

我想执行一个命令来删除遥控器上遵循特定模式的分支。

示例用例:删除以 开头的
所有分支。originv1/

如果可能的话,最好通过安全检查来增强此命令:仅删除已合并到master.

LeG*_*GEC 5

列出此类分支:

git for-each-ref --merged master \
   --format="%(refname:short)" refs/remotes/origin/v1

# if you want only the `v1/xxx` part without the leading `origin/` :
git for-each-ref --merged master \
    --format="%(refname:lstrip=3)" refs/remotes/origin/v1
Run Code Online (Sandbox Code Playgroud)

然后您可以将其输出提供给git push origin -d

git for-each-ref --merged master \
    --format="%(refname:lstrip=3)" refs/remotes/origin/v1 |\
    xargs git push origin -d
Run Code Online (Sandbox Code Playgroud)

注意:使用的语法git for-each-ref比 for 稍微复杂一点git branch,但其输出稳定,可通过--format选项进行高度配置,并且适合脚本编写。git branch旨在供人类阅读,并且有几个格式选项,这些选项会在脚本中产生恼人的错误(*在活动分支上引导,不可配置的特定间距......)

作为参考,使用的等效命令git branch是:

git branch --merged master -r --list origin/v1
Run Code Online (Sandbox Code Playgroud)