有没有一种方法可以批量删除git分支?

时间:2020-04-02 12:33:21

标签: git bitbucket branch

我一直想从git存储库中清除所有未使用的分支。大约有100个分支机构。

有一种方法可以从BitBucket帐户中一个接一个地选择分支并将其手动删除。但是这种方法可以接受。

因此,我创建了一个脚本,该脚本可批量删除分支并在Linux / Ubuntu中受支持。

创建delete_branch.sh

#!/bin/bash

delete_branch(){
    BRANCH=$1;
    DIR_PATH=<path of your project root>;
    cd ${DIR_PATH}
    echo git push origin --delete ${BRANCH}
    git push origin --delete ${BRANCH}
}

BRANCHES=( branch1 branch2 branch3 ... branchN );

for i in "${BRANCHES[@]}"
do
   : 
    delete_branch $i;
    echo deleting branch ${i};
done

通过./delete_branch.sh从终端执行此文件

1 个答案:

答案 0 :(得分:1)

对我来说,“未使用”的分支定义为合并到当前分支中的任何东西,不称为master,develop或release / *。如果您同意,则可以使用这两个bash脚本(将它们放在PATH中,一个调用另一个)。

默认的远程清理称为origin,但是可以将其指定为第二个参数,排除的分支是第三个参数。

cleanupremote.sh

#!/bin/bash

set -e

function listbranches {
  git branch -r --merged | tr -d ' ' | sed "s/$remote\///" | grep -vxE "$excludes"
}

remote=${2:-origin}
excludes=${3:-master|develop|release/.*}

if [ "$1" == "--dry-run" ]; then
  echo "The following branches would be deleted:"
  listbranches
  exit 0;
elif [ "$1" == "--really-delete" ]; then
  echo "Deleting remote branches..."
else
  echo "Error: first parameter must be either --dry-run or --really-delete"
  exit 1
fi

listbranches | deleteremotebranches.sh $remote

deleteremotebranches.sh

#!/bin/bash

set -e
remote=${1:-origin}
xargs git push $remote --delete

典型用法是仅运行cleanupremote.sh来查看所需的开关,然后使用--dry-run重复此操作,并添加到第三个参数,直到没有列出不需要的分支为止:

cleanupremote.sh --dry-run origin 'master|develop|feature/oh_not_that_one_I_need_it'
cleanupremote.sh --really-delete origin 'master|develop|feature/oh_not_that_one_I_need_it'

这是两个单独的文件,因此您可以直接调用deletebranches.sh,在要删除的分支名称中指定一个远程目录和管道。