作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要从 master 获取非 merge 类型且不来自其他分支的提交(它们直接放在 master 上)。 git命令是
git log --no-merges --first-parent
我如何使用 JGit 执行此操作? 我设法使用
获得了非 merge 类型的提交RevFilter.NO_MERGES
但是我怎样才能得到直接提交到 master 分支的提交呢?
最佳答案
要获得第一个 parent ,您可以调用 RevCommit.getParent()
并从那里开始工作。
不使用 RevWalk
的理由用于访问树的是 RevWalk
在不遵循层次结构的情况下遍历 revs——也就是说,如果你没有阅读提交,它的父级将被读取——这不是 - -first-parent
所做的,以及我们在这里想要的。
所以 Rüdiger Herrmann's answer将无法删除在 (n+1,...)th 分支上所做的提交。它只会删除在这些分支上所做的第一次提交。
Repository repo = git.getRepository();
try (RevWalk walk = new RevWalk(repo)) {
RevCommit head = walk.parseCommit(repo.getRef(MASTER).getObjectId());
int count = 0;
while (head != null) {
count++;
RevCommit[] parents = head.getParents();
if (parents != null && parents.length > 0) {
head = walk.parseCommit(parents[0]);
} else {
head = null;
}
}
return count;
}
这是从 groovy source 转换而来的
关于java - 如何在 jgit 中调用 git show --first-parent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33038224/
我是一名优秀的程序员,十分优秀!