2017-09-26 5 views
0

私はリモートからフェッチすることができましたが、私はローカルマスターブランチで変更をステージングするために以下のコードを実行しています。libgit2:フェッチ後にマージしてコミットするには?

git_annotated_commit * fetchhead_commit; 

    git_annotated_commit_lookup(&fetchhead_commit, 
     repo, 
     oid 
    );      

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

は、だから今、私がコミットするgitのコマンドラインツールを使用する場合、私は自動マージはコメントをコミットし、私は、ログをリモートからのと同じであることがわかります後に取得します。私はlibgitで同じものを取得しようとしていますが、リモート履歴のマージ結果を失うという結果になっています。

リモートからの履歴を保存するために、マージされた変更を「適切に」コミットする方法を教えてください。

編集:もう少し早送りをしても、まだローカルコミットがある場合、これらは受信マージ後に失われます。ローカルの変更は失われませんが、マージ後にステージングされ、再度コミットする必要があります。

あなたはここに私のコードを見ることができます:https://github.com/fintechneo/libgit2/blob/master/jsbuild/jslib.c

をマージが再びjsgitpull

から呼び出され、誰もが疑問に思う場合は、レコードのために、このハックは、Webブラウザでは動作しないfetchead_foreach_cb機能で起こっていますemscriptenものは何についてですか?

+0

どのようにコミットを作成していますか?これまでに何を試しましたか? –

+0

早送り(git_reference_set_target を使って)することでもう少し手に入りました。しかし、ローカルの変更がある場合、これらのコミットは失われ、ローカルで変更されたファイルはステージングされ、再度コミットする必要があります。さあ、https://github.com/fintechneo/libgit2/blob/master/jsbuild/jslib.cのfetchead_foreach_cb関数を参照してください。 –

+0

さて、マージした後はどうやってコミットを作成していますか?あなたは 'git_commit_create'を呼び出していますか? –

答えて

1

マージコミットをgit_commit_createで作成します。マージコミットには2つの親が必要です。 1つは現在のHEADコミットです。 2番目は、git_mergeにマージした同じ注釈付きコミットです(たとえば、フェッチ・ヘッド)。

+0

ありがとう!私の間違いは、git_commitを使用しているときに親としてgit_annotated_commit型を渡したことでした。私はあなたの答えにこれを加えました。私はそれを書き直しても構いません。 –

関連する問題