首页 > 解决方案 > 如何解决提交到分支?

问题描述

我需要找到所有带有提交的分支(标签)。在使用命令的 CLIgit上,可以使用git branch --contains <commit>命令。

go-git如何使用库做类似的事情?

标签: go-git

解决方案


我试图提出一个解决方案并得到了这个:

func FindBranchesByCoommit(r *git.Repository, c *object.Commit) (branches []*plumbing.Reference, err error) {
    brIt, err := r.Branches()
    if err != nil {
        return
    }
    defer brIt.Close()

    if err := brIt.ForEach(func(ref *plumbing.Reference) error {
        com, err := r.CommitObject(ref.Hash())
        if err != nil {
            return err
        }

        comIt, err := r.Log(&git.LogOptions{From: com.Hash})
        if err != nil {
            return err
        }
        defer comIt.Close()

        for {
            if com, err := comIt.Next(); err == nil {
                if c.Hash == com.Hash {
                    branches = append(branches, ref)
                    break
                }
            } else if err == io.EOF {
                break
            } else {
                return err
            }
        }

        return nil
    }); err != nil {
        return nil, err
    }

    return
}

推荐阅读