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

3

我想执行一条命令,删除符合特定模式的远程分支。

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

如果可能的话,最好在这个命令中增加一个安全检查:只删除已经合并到master的分支。

2个回答

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

您可以将其输出输入到git push origin -d

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

注意:使用git for-each-ref的语法比git branch更加复杂,但其输出是稳定的,具有高度可配置性的--format选项适用于脚本。 git branch旨在供人类阅读,并且具有多种格式选项,这会导致脚本中烦人的错误(活动分支上的前导*,不可配置的特定间距...)。

参考命令使用git branch

git branch --merged master -r --list origin/v1

1

列出所有以v1/开头的origin分支

git branch --remotes --merged master --list 'origin/v1/*' --format '%(refname:lstrip=3)'

删除所有以 v1/ 开头的 origin 分支

git branch --remotes --merged master --list 'origin/v1/*' --format '%(refname:lstrip=3)' |
  xargs git push --delete origin

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