LibGit2Sharp日志远程

本文关键字:日志 LibGit2Sharp | 更新日期: 2023-09-27 17:52:11

是否有任何方法列出已获取的提交,但没有使用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..
...

前两个提交还没有合并到我的本地存储库中。也就是说,如果我忽略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();
}

LibGit2Sharp日志远程

您可以使用以下命令获取远程源分支的提交:

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);

因为:

    Since:指向提交对象的指针或作为起始点的指针列表
  • Until:指向提交对象的指针或指针的列表,该列表将从枚举中排除(以及祖先)。

因此,使用上述代码,您想要从分支"origin/HEAD"提交,并排除包含在"HEAD"中的提交,这意味着返回所有提交,这些提交在提取的分支中,尚未合并到"HEAD"