Golang轻松清理已删除的Git分支

Golang轻松清理已删除的Git分支 cleanup 是一个用于保持 Git 仓库整洁的 CLI 工具。它可以通过一条命令移除一个或多个仓库中的旧分支。

https://github.com/dominikbraun/cleanup

1 回复

更多关于Golang轻松清理已删除的Git分支的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个非常实用的工具,专门用于自动化清理本地Git仓库中那些已经合并到主分支或已在上游被删除的远程跟踪分支。手动执行 git fetch -pgit branch -d 确实繁琐,这个工具将其封装为一条简洁命令。

核心功能与示例:

  1. 基本清理(默认行为):删除所有已合并到当前检出分支(如 mainmaster)的本地分支。

    cleanup
    
  2. 指定目标分支:删除所有已合并到 develop 分支的本地分支。

    cleanup --target develop
    
  3. 包含未合并分支(强制删除):使用 -f 标志,这会删除所有在目标分支中不存在的本地分支(警告:这会删除未合并的工作,可能导致数据丢失)。

    cleanup -f
    # 或指定目标分支
    cleanup --target develop -f
    
  4. 交互模式:在删除每个分支前进行确认,更安全。

    cleanup -i
    

Go语言实现的关键思路:

如果你想了解其实现原理或自己编写类似工具,核心是调用 git 命令并解析输出。以下是一个简化的Go代码示例,演示如何获取已合并分支的列表:

package main

import (
    "fmt"
    "os/exec"
    "strings"
)

func getMergedBranches(targetBranch string) ([]string, error) {
    // 执行 git branch --merged <target> 命令
    cmd := exec.Command("git", "branch", "--merged", targetBranch)
    output, err := cmd.Output()
    if err != nil {
        return nil, err
    }

    branches := strings.Split(strings.TrimSpace(string(output)), "\n")
    var result []string
    for _, branch := range branches {
        branch = strings.TrimSpace(branch)
        // 移除当前分支前的 "* " 标记,并排除目标分支本身
        if branch != "" && !strings.Contains(branch, targetBranch) {
            branch = strings.TrimPrefix(branch, "* ")
            result = append(result, branch)
        }
    }
    return result, nil
}

func deleteBranch(branchName string) error {
    cmd := exec.Command("git", "branch", "-d", branchName)
    return cmd.Run()
}

func main() {
    target := "main"
    mergedBranches, err := getMergedBranches(target)
    if err != nil {
        fmt.Printf("Error getting merged branches: %v\n", err)
        return
    }

    for _, branch := range mergedBranches {
        fmt.Printf("Deleting merged branch: %s\n", branch)
        if err := deleteBranch(branch); err != nil {
            fmt.Printf("Failed to delete %s: %v\n", branch, err)
        }
    }
}

这个工具通过自动化常规维护任务,显著提升了开发工作流的整洁度。对于频繁使用Git分支的团队来说,它能有效减少本地仓库的冗余。

回到顶部