【发布时间】:2019-11-11 22:12:20
【问题描述】:
我正在尝试在分支 foo 上查找不在 master 上的提交。我在简单的情况下使用此功能,但是一旦将新更改从 master 合并到 foo 中,它就会崩溃。
更详细的:
- 如果您在
master上有提交 A、B 和 C - 然后你创建分支
foo并在那里添加提交 D 和 E - 然后你在
master上创建提交 F - 然后将 F 从
master合并到foo(使用合并提交)
现在尝试获取合并基数返回 F 而不是 C。所以我不能迭代从C 到foo 头部的提交(给出C、D、E、F,然后我将缩小到D 和@ 987654341@ 使用isMergedInto)
public RevCommit findMergeBase(ObjectId foo, ObjectId bar) throws MissingObjectException,
IncorrectObjectTypeException, IOException {
RevWalk walk = null;
try {
walk = new RevWalk(repo);
RevCommit fooHead = walk.parseCommit(foo);
RevCommit barHead = walk.parseCommit(bar);
walk.setRevFilter(RevFilter.MERGE_BASE);
walk.markStart(fooHead);
walk.markStart(barHead);
RevCommit base = null;
while (true) {
RevCommit commit = walk.next();
if (commit == null)
break;
base = commit;
}
return base;
}
finally {
if (walk != null) {
walk.reset();
walk.close();
walk.dispose();
}
}
}
【问题讨论】:
-
查看这里如何在 JGit 中找到合并基:stackoverflow.com/questions/26434452/…
-
@RüdigerHerrmann 是的,我相信我正在做该问题中解释的内容,只是没有产生预期的结果
-
在答案中,返回第一次调用
walk.next()的结果,你的代码做了不同的事情。 -
@RüdigerHerrmann 好的。我不确定我从哪个例子中获取了 while 循环,但我得到了相同的结果,只是将第一次调用返回到
walk.next()。
标签: jgit