在git2go中合并当前分支与上游(或任何其他ref)

时间:2015-07-07 18:39:06

标签: go libgit2

我正在尝试在git2go中复制以下命令的结果:

git merge -X theirs --no-ff -m "Commit msg" <commit>

我能够使用remote.Fetch(nil, nil, "")成功获取上游远程,但我无法进行实际合并。这是我用于合并的代码:

// get the upstream ref's annotated commit to merge in
head, _ := repo.Head()
upstream, _ := head.Branch().Upstream()
annotatedCommit, _ := repo.AnnotatedCommitFromRef(upstream)

// prepare merge and checkout options
mergeOpts, _ := git.DefaultMergeOptions()
mergeOpts.FileFavor = git.MergeFileFavorTheirs
checkoutOpts := git.CheckoutOpts{
    Strategy: git.CheckoutUseTheirs,
}

// do the merge
err := repo.Merge([]*git.AnnotatedCommit{annotatedCommit}, &mergeOpts, &checkoutOpts)
// no error here

我知道在此之后我需要检查索引是否存在任何冲突,并且实际上是与两个父母一起进行提交,但是我现在卡在这里,因为Merge()似乎不是做任何事情(没有合并,没有结账)。

1 个答案:

答案 0 :(得分:1)

Checkout默认执行干运行,所以为了能够成功合并,我必须使用这样的东西:

checkoutOpts := git.CheckoutOpts{
    Strategy: git.CheckoutSafe | git.CheckoutRecreateMissing | git.CheckoutAllowConflicts | git.CheckoutUseTheirs,
}

唯一可用的文档位于checkout.go source