Git2go - pull && merge

标签 git merge git-pull libgit2

我正在尝试实现一些可以给我 git pullgit fetch && git merge 的结果的东西。我得到了部分工作,但我遇到的问题是在运行以下代码后,当前的 repo 认为有本地更改要提交。

据我所知,我相信我可能没有从正确的 HEAD 创建带注释的提交,或者我需要进行另一次提交? (我不确定)。

我的代码看起来像这样,但我卡住了:

func (repo *Repo) Pull() error {
    // Get remote
    remote, err := repo.Remotes.Lookup("origin")
    if err != nil {
        remote, err = repo.Remotes.Create("origin", repo.Path())
        if err != nil {
            return err
        }
    }

    // Get the branch
    branch, err := repo.Branch()
    if err != nil {
        return err
    }

    // Get the name
    branchName, err := branch.Name()
    if err != nil {
        return err
    }

    if err := remote.Fetch([]string{}, &git.FetchOptions{}, ""); err != nil {
        return err
    }

    // Merge
    remoteRef, err := repo.References.Lookup("refs/remotes/origin/" + branchName)
    if err != nil {
        return err
    }

    mergeRemoteHead, err := repo.AnnotatedCommitFromRef(remoteRef)
    if err != nil {
        return err
    }

    mergeHeads := make([]*git.AnnotatedCommit, 1)
    mergeHeads[0] = mergeRemoteHead
    if err = repo.Merge(mergeHeads, nil, nil); err != nil {
        return err
    }

    return nil
}

运行它后,我得到了来自远程 merge 的更改并更新了工作目录,但它告诉我需要进行提交。

我想我有一个与 this question 的 OP 类似的问题.

最佳答案

这就是 libgit2 的 git_merge 的方式功能记录在案:

Any changes are staged for commit and any conflicts are written to the index. Callers should inspect the repository's index after this completes, resolve any conflicts and prepare a commit.

所以你必须添加代码来检查index has conflicts是否.如果没有,您可以commit上演了什么。否则,您可能希望提示用户解决冲突。

关于Git2go - pull && merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33122773/

相关文章:

pandas:merge/concat.join 两个 dfs

git - 使用 NetBeans pull 时如何获取修改后的文件?

git - 将单个文件从克隆的仓库推送到 fork 的仓库

git - 藏了一些代码但不知道它在哪个 stash - 如何弄清楚?

Gitlab-ci.yml 创建 merge 请求

Git 仅在本地存储库中恢复公共(public)提交

android - GIT merge 的机制是什么?

r - 如何根据关键变量合并具有部分相同列名的多个数据框?

git - pull 断时 merge 更改

Git - 从父仓库中提取时如何处理本地重命名文件的更改