Golang轻松清理已删除的Git分支
Golang轻松清理已删除的Git分支 cleanup 是一个用于保持 Git 仓库整洁的 CLI 工具。它可以通过一条命令移除一个或多个仓库中的旧分支。
1 回复
更多关于Golang轻松清理已删除的Git分支的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这是一个非常实用的工具,专门用于自动化清理本地Git仓库中那些已经合并到主分支或已在上游被删除的远程跟踪分支。手动执行 git fetch -p 和 git branch -d 确实繁琐,这个工具将其封装为一条简洁命令。
核心功能与示例:
-
基本清理(默认行为):删除所有已合并到当前检出分支(如
main、master)的本地分支。cleanup -
指定目标分支:删除所有已合并到
develop分支的本地分支。cleanup --target develop -
包含未合并分支(强制删除):使用
-f标志,这会删除所有在目标分支中不存在的本地分支(警告:这会删除未合并的工作,可能导致数据丢失)。cleanup -f # 或指定目标分支 cleanup --target develop -f -
交互模式:在删除每个分支前进行确认,更安全。
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分支的团队来说,它能有效减少本地仓库的冗余。

