JGit: Как сдавить коммиты
Любые предложения о том, как использовать RebaseCommand
, MergeCommand
или любая другая команда в JGit для сквоша фиксирует? Я не могу найти много примеров, и документация не очень полезна.
Простой пример
Я хочу раздавить следующее дерево:
A-----B------C------D------E------F------G------H
В этот:
A----Z-----H
куда Z
раздавленный коммит B
, C
, D
, E
, F
, а также G
,
Любые предложения и полезные ресурсы приветствуются.
1 ответ
Решение
В командной строке Git это будет сделано с помощью git rebase -i ...
и затем выбрав "fixup" для коммитов C, D, E, F и G. С fixup Z будет иметь то же самое сообщение коммита, что и B.
В JGit это можно сделать с помощью RebaseCommand:
InteractiveHandler handler = new InteractiveHandler() {
public void prepareSteps(List<RebaseTodoLine> steps) {
// loop through steps and use setAction to change action
}
public String modifyCommitMessage(String oldMessage) {
return oldMessage;
}
};
Repository repo = FileRepositoryBuilder.create(gitDir);
Git git = Git.wrap(repo);
git.rebase().setUpstream(commitA).runInteractively(handler).call();