libgit2:获取后如何合并和提交?

libgit2: How to merge and commit after fetch?

我已经设法从远程获取,并且我运行下面的代码让更改在本地 master 分支中暂存。

    git_annotated_commit * fetchhead_commit;

    git_annotated_commit_lookup(&fetchhead_commit,
        repo,
        oid
    );                      

    git_merge(repo,&fetchhead_commit,1,NULL,NULL);

所以现在如果我使用 git 命令行工具提交,我会得到一个自动合并提交注释,之后我可以看到日志与远程日志相同。我正在尝试使用 libgit 获得相同的结果,但到目前为止,我在尝试创建合并提交时所做的努力导致远程历史记录丢失。

我应该如何 "proper" 提交合并的更改以保留远程历史记录?

编辑:通过快进走得更远,但如果有本地提交,这些提交在传入合并后仍然会丢失。本地更改不会丢失,但会在合并后暂存并且必须再次提交。

你可以在这里看到我的代码:https://github.com/fintechneo/libgit2/blob/master/jsbuild/jslib.c

合并发生在 fetchead_foreach_cb 函数中,该函数再次从 jsgitpull

调用

郑重声明,如果有人想知道 emscripten 是关于什么的,那么这个 hack 确实可以在网络浏览器中使用。

使用 git_commit_create 创建合并提交。合并提交应该有两个 parents。一个是当前的 HEAD 提交。第二个是您在 git_merge 中合并的相同注释提交(例如获取头)。