有没有办法列出已获取但未使用 LibGit2Sharp merge 的提交?
例如,我可以运行以下 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..
...
前两个提交尚未 merge 到我的本地存储库中。 IE。如果我省略来源,这就是我得到的结果:
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。如何获取包含尚未 merge 的提交的列表?
using (var repo = new Repository(@"C:\Users\Tom\SourceLog"))
{
var c = repo.Commits.First();
}
最佳答案
您可以通过以下方式获取远程原始分支的提交:
repo.Branches["origin/HEAD"].Commits
并且您可以使用First()
按默认排序获取最新提交。但是,您可以获得远程分支的所有提交,而不仅仅是未 merge 的提交。
如果您想要收集未 merge 的提交,您应该使用QueryBy(filter)
来获取提交。 nulltoken's asnwer描述了解决方案,但其中包含错误。正确的用法是:
var filter = new Filter
{
Since = repo.Branches["origin/HEAD"],
Until = repo.Head
};
var notMergedCommits = repo.Commits.QueryBy(filter);
因为:
- Since:指向提交对象的指针或要视为起点的指针列表。
- Until:指向提交对象的指针或将从枚举中排除的指针列表(以及祖先)。
因此,使用上面的代码,您希望获得来自分支 "origin/HEAD"
的提交,并排除 "HEAD"
中包含的提交,这意味着返回所获取分支中尚未 merge 到 "HEAD"
的所有提交。
关于c# - LibGit2Sharp 日志远程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14295805/