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();
Другие вопросы по тегам