JGit: как раздавить коммиты

Любые предложения о том, как использовать RebaseCommand, MergeCommand или любую другую команду в JGit для сквоша коммитов? Я не могу найти много примеров, и документация не очень полезна.

Простой пример

Я хочу раздавить следующее дерево:

A-----B------C------D------E------F------G------H

В этот:

A----Z-----H

Где Z — сжатая фиксация B, C, D, E, F и G.

Любые предложения и полезные ресурсы приветствуются.


person modulitos    schedule 08.04.2014    source источник


Ответы (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();
person robinst    schedule 08.04.2014
comment
Спасибо. Хотя я не могу найти много примеров использования JGit через Google или SO, но я обнаружил, что отчеты об ошибках/исправлениях Eclipse являются еще одним хорошим источником информации: git.eclipse.org/r/#/c/7779/6 /org.eclipse.jgit.test/tst/org/ - person modulitos; 09.04.2014
comment
Вот еще один пост о том, как раздавить коммиты, которые не включают головную фиксацию: Most-recent-commits-and-do" title="git раздавливает последовательные коммиты, которые не являются самыми последними коммитами и делают"> stackoverflow.com/questions/26029698/ - person modulitos; 23.10.2014
comment
Что касается отсутствующих образцов: я пытаюсь собрать несколько полезных фрагментов в моей jgit-cookbook по адресу github.com/centic9/. jgit-поваренная книга - person centic; 20.10.2016