【发布时间】:2022-02-27 02:02:47
【问题描述】:
我想执行一个命令,删除 remote 上遵循特定模式的分支。
示例用例:
删除origin 上以v1/ 开头的所有分支。
如果可能,最好通过安全检查来增强此命令:仅删除已合并到 master 中的分支。
【问题讨论】:
我想执行一个命令,删除 remote 上遵循特定模式的分支。
示例用例:
删除origin 上以v1/ 开头的所有分支。
如果可能,最好通过安全检查来增强此命令:仅删除已合并到 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
【讨论】:
origin 上所有以v1/ 开头的分支
git branch --remotes --merged master --list 'origin/v1/*' --format '%(refname:lstrip=3)'
origin 上所有以v1/ 开头的分支
git branch --remotes --merged master --list 'origin/v1/*' --format '%(refname:lstrip=3)' |
xargs git push --delete origin
【讨论】: