【问题标题】:Git: delete all remote branches with a certain patternGit:删除具有特定模式的所有远程分支
【发布时间】:2022-02-27 02:02:47
【问题描述】:

我想执行一个命令,删除 remote 上遵循特定模式的分支。

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

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

【问题讨论】:

    标签: git grep xargs


    【解决方案1】:

    列出这样的分支:

    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
    

    【讨论】:

      【解决方案2】:

      列出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
      

      【讨论】:

        猜你喜欢
        • 2016-01-09
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        • 2012-01-04
        • 2018-04-05
        • 2014-06-09
        • 2015-05-15
        • 2012-05-23
        相关资源
        最近更新 更多