下面你可以找到一个的Java 8个流API解决方案:
final List<Ref> branches = git.branchList().setListMode(ListBranchCommand.ListMode.ALL).call();
final RevWalk revWalk = new RevWalk(git.getRepository());
branches.stream()
.map(branch -> {
try {
return revWalk.parseCommit(branch.getObjectId());
} catch (IOException e) {
throw new RuntimeException(e);
}
})
.sorted(Comparator.comparing((RevCommit commit) -> commit.getAuthorIdent().getWhen()).reversed())
.findFirst()
.ifPresent(commit -> {
System.out.printf("%s: %s (%s)%n", commit.getAuthorIdent().getWhen(), commit.getShortMessage(), commit.getAuthorIdent().getName());
});
它遍历所有分支机构,并挑选最新提交的这些分支,然后将其按日期后裔秩序和选秀权排序提交的名单第一个。如果存在,它打印到控制台输出是这样的:
Wed Aug 30 09:49:42 CEST 2017: test file added (Szymon Stepniak)
当然的行为对最后提交的存在是示范性的,它可以与任何其他业务逻辑很容易地更换。我希望它有帮助。
你能澄清一下_latest_的意思吗?你是说按日期最小的?来自所有分支? –
你的意思是'HEAD'最终指向的提交吗? –
是的确切地说,从所有分支按日期采集。为所有分支寻找他是否很重要,因为我认为无论分支机构如何,我都可以相对于回购来寻找他? –