自动删除分支、rebase 分支操作

253 阅读1分钟

1. 批量删除远程已经合并到master的分支

创建脚本 removeBranch.sh,内容如下

#!/bin/bash
# 要排除某个分支就继续在后面加上 |(branch$)
list=(
  $(git branch --merged master | egrep -v "(^\*|(test$)|(master$)|(online$))")
)

for branch in ${list[@]}
  do
      # 打印分支信息
      echo $branch;
      # 删除远程分支
      git push origin :$branch 
      # 删除本地分支
      git branch -D $branch
      
  done

执行 sh removeBranch.sh

最好是在master下面操作,因为当前所在分支可以已经合并到master了,造成脚本执行阻断。

在本地添加所有分支的方法

.git\refs\remotes\origin 里面的内容拷贝到 .git\refs\heads

2. rebase origin/master操作

创建脚本 rebaseBranch.sh,内容如下

#!/bin/bash
# 要排除某个分支就继续在后面加上 |(branch$)
list=(
  $(git branch --no-merged master | egrep -v "(^\*|(test$)|(master$)|(online$))")
)
git fetch
for branch in ${list[@]}
  do
      # 打印分支信息
      echo $branch;
      git checkout $branch
      git rebase origin/master
  done

在任意分支上面执行 sh rebaseBranch.sh

3. 监测合并搭到 master,做一些事情

  1. 自动切换online执行 git rebase master.git/hooks 下面添加 post-merge,添加如下内容
#!/bin/sh
echo "$(git rev-parse --abbrev-ref HEAD)"
if [ "$(git rev-parse --abbrev-ref HEAD)" = "master" ]; then
  # 执行特定操作
  git checkout online
  git rebase master
fi

注意要想使 post-merge 钩子有效,还要设置操作权限,chmod +x .git/hooks/post-merge ,windows 里面可以在 git bash 里面执行。

  1. 结合合并到master的时候删除已经合并到master的分支
#!/bin/bash
# 打印当前 HEAD 的分支
# echo "$(git rev-parse --abbrev-ref HEAD)"

# 找出合并到master的分支,过滤掉test、master、online,要排除某个分支就继续在后面加上 |(branch$)
list=(
  $(git branch --merged master| egrep -v "(^\*|(test$)|(master$)|(online$))")
)

if [ "$(git rev-parse --abbrev-ref HEAD)" = "master" ]
 then
  for branch in ${list[@]}
    do
        # 打印分支信息
        echo $branch;
        # 删除本地分支
        git branch -D $branch
    done

  # 执行特定操作
  git checkout online
  git rebase master
fi