我想执行一条命令,删除符合特定模式的远程分支。
示例用例:
删除所有以v1/
开头的origin
分支。
如果可能的话,最好在这个命令中增加一个安全检查:只删除已经合并到master
的分支。
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
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