怎样用脚本批量删除Git分支?

wen 实用脚本 2

本文目录导读:

怎样用脚本批量删除Git分支?

  1. 删除本地分支
  2. 删除远程分支
  3. 完整的Shell脚本
  4. 安全版本(带确认)
  5. 常用的一行命令
  6. 注意事项
  7. 测试命令(安全预览)

我来介绍几种批量删除Git分支的方法:

删除本地分支

删除所有本地分支(除了当前分支)

git branch | grep -v "^*" | xargs git branch -d

删除特定模式的分支

# 删除所有以 "feature/" 开头的分支
git branch | grep "feature/" | xargs git branch -d
# 删除所有已合并的分支
git branch --merged | grep -v "^*" | xargs git branch -d

删除远程分支

批量删除远程分支

# 删除远程所有以 "feature/" 开头的分支
git branch -r | grep "origin/feature/" | sed 's/origin\///' | xargs -I {} git push origin --delete {}
# 或使用更简单的方式
git branch -r | grep "feature/" | sed 's/origin\///' | xargs git push origin --delete

完整的Shell脚本

创建一个 delete-git-branches.sh 文件:

#!/bin/bash
# 批量删除Git分支脚本
echo "====== Git 批量分支删除工具 ======"
echo "1. 删除本地已合并分支"
echo "2. 删除本地特定模式分支"
echo "3. 删除远程特定模式分支"
echo "4. 删除本地和远程的特定模式分支"
echo "================================"
read -p "请选择操作 (1-4): " choice
case $choice in
    1)
        echo "删除本地已合并分支(保留当前分支和main/master)..."
        git branch --merged | grep -v "\*\|master\|main" | xargs -n 1 git branch -d
        echo "完成!"
        ;;
    2)
        read -p "输入要删除的分支模式(如 feature/): " pattern
        echo "删除本地以 '$pattern' 开头的分支..."
        git branch | grep "^$pattern" | xargs -n 1 git branch -d
        echo "完成!"
        ;;
    3)
        read -p "输入要删除的远程分支模式(如 feature/): " pattern
        echo "删除远程以 '$pattern' 开头的分支..."
        git branch -r | grep "origin/$pattern" | sed 's/origin\///' | xargs -n 1 git push origin --delete
        echo "完成!"
        ;;
    4)
        read -p "输入要删除的分支模式(如 feature/): " pattern
        echo "1. 删除本地分支..."
        git branch | grep "^$pattern" | xargs -n 1 git branch -d
        echo "2. 删除远程分支..."
        git branch -r | grep "origin/$pattern" | sed 's/origin\///' | xargs -n 1 git push origin --delete
        echo "完成!"
        ;;
    *)
        echo "无效选择"
        exit 1
        ;;
esac

安全版本(带确认)

#!/bin/bash
delete_branch_safe() {
    local branch_name=$1
    echo "准备删除分支: $branch_name"
    read -p "确认删除? (y/n): " confirm
    if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
        git branch -d $branch_name
        echo "已删除: $branch_name"
    else
        echo "跳过: $branch_name"
    fi
}
# 列出所有要删除的分支
branches_to_delete=$(git branch | grep "feature/")
for branch in $branches_to_delete; do
    delete_branch_safe $branch
done

常用的一行命令

# 删除30天前创建的分支(需要git-extras)
git-delete-merged-branches
# 删除除了master/main之外的所有本地分支
git branch | grep -v "master\|main" | xargs git branch -D
# 强制删除所有本地分支(小心使用!)
git branch | grep -v "master\|main\|develop" | xargs git branch -D

注意事项

  1. 备份重要代码:删除前确保分支代码已合并或备份
  2. 使用 -d 而不是 -D-d 只删除已合并分支,-D 强制删除
  3. 先检查再删除:先用 echo 测试要删除的分支列表
  4. 远程分支删除不可恢复:远程分支删除后需要管理员权限才可能恢复

测试命令(安全预览)

# 只显示要删除的分支,不实际删除
git branch | grep "feature/" | xargs echo "将要删除: "

这些脚本可以根据你的具体需求进行修改和组合使用。

抱歉,评论功能暂时关闭!