2

フェッチされたがLibGit2Sharpを使用してマージされていないコミットを一覧表示する方法はありますか?

たとえば、次の git コマンドを実行できます。

C:\Users\Tom\SourceLog>git log origin
commit f3beb4960b2f4bf5641d5b512b5b8c3081512a56
Author: Tom Hunter
Date:   Wed Jan 9 22:58:51 2013 +0000

    Rollback change to icon

    Seemed to crash on windows xp for some reason..

commit d95f29a6cbfea9cb6009c3095a67d71f86d9e8bd
Author: Tom Hunter
Date:   Mon Jan 7 21:34:36 2013 +0000

    Updating Icon

commit 8785ed4ff3c46bef46ea6e2398c115b4b0203b2c
Author: Tom Hunter
Date:   Mon Jan 7 21:22:54 2013 +0000

    Fixing tests

    Moved GenerateFlowDocuments method to LogEntry class.
    Have somehow managed to greatly simplify tests..

...

上位 2 つのコミットはまだローカル リポジトリにマージされていません。つまり、 originを省略した場合に得られるものは次のとおりです。

C:\Users\Tom\SourceLog>git log
commit 8785ed4ff3c46bef46ea6e2398c115b4b0203b2c
Author: Tom Hunter
Date:   Mon Jan 7 21:22:54 2013 +0000

    Fixing tests

    Moved GenerateFlowDocuments method to LogEntry class.
    Have somehow managed to greatly simplify tests..

...

次のコードでは、8785ed しか表示されません。まだマージされていないコミットを含むリストを取得するにはどうすればよいですか?

using (var repo = new Repository(@"C:\Users\Tom\SourceLog"))
{
    var c = repo.Commits.First();
}
4

1 に答える 1

4

リモートのオリジン ブランチのコミットは次の方法で取得できます。

repo.Branches["origin/HEAD"].Commits

First()また、デフォルトのソートで最新のコミットを取得することもできます。ただし、マージされていないものだけでなく、リモートブランチのすべてのコミットを取得します。

マージされていないコミットのコレクションが必要な場合はQueryBy(filter)、コミットを取得するために使用する必要があります。nulltoken の回答に解決策が記載されていますが、エラーが含まれています。正しい使い方は次のとおりです。

var filter = new Filter
{
    Since = repo.Branches["origin/HEAD"],
    Until = repo.Head
};
var notMergedCommits = repo.Commits.QueryBy(filter);

なぜなら:

  • 開始点: コミット オブジェクトへのポインター、または開始点と見なされるポインターのリスト。
  • until:列挙から (祖先と共に)除外されるコミット オブジェクトまたはポインターのリストへのポインター。

したがって、上記のコードでは、ブランチからのコミットを取得し"origin/HEAD"、自分に含まれているコミットを除外する必要があります。"HEAD"これは、フェッチされたブランチにあり、まだマージされていないすべてのコミットを返すことを意味します"HEAD"

于 2013-01-13T07:32:24.753 に答える