Я пытаюсь найти коммиты на ветке foo
, которых нет на master
. У меня это работает для простых случаев, но как только новые изменения были объединены из master
в foo
, он ломается.
Более подробно:
- Если у вас естькоммиты A, B и C на
master
- , затем вы создаете ветку
foo
и добавляете коммиты D и E - , затем вы создаете коммит F на
master
- затем вы сливаете F из
master
в foo
(используя коммит слияния)
, теперь пытаясь получить базу слияния, которая возвращает F
вместо C
. Поэтому я не могу перебирать коммиты от C
до foo
головы (давая C
, D
, E
, F
, которые я затем сужу до D
& E
с использованием 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();
}
}
}