Прервать слияние с помощью JGit

Это довольно просто: как мне смоделировать команду git merge --abort в JGit? Мне нужно "просмотреть" конфликты до реального слияния

1 ответ

Решение

Прямого эквивалента для git merge --abort в JGit. Этот фрагмент кода может служить отправной точкой:

// clear the merge state
repository.writeMergeCommitMsg( null );
repository.writeMergeHeads( null );

// reset the index and work directory to HEAD
Git.wrap( repository ).reset().setMode( ResetType.HARD ).call();

Он очищает файлы состояния слияния, а затем сбрасывает индекс и рабочий каталог в содержимое текущей фиксации HEAD.

Для проверки возможности объединения двух коммитов вы также можете использовать слияние в ядре. Это позволит избежать извлечения конфликтующего коммита в рабочий каталог, чтобы потом просто сбросить его.

RevCommit parentCommit = mergeCommit.getParent( 0 );
revWalk.parseHeaders( parentCommit );

ResolveMerger merger = ( ResolveMerger )MergeStrategy.RESOLVE.newMerger( repository, true );
merger.setWorkingTreeIterator( new FileTreeIterator( repository ) );
merger.setBase( parentCommit.getTree() );
if( !merger.merge( headCommit, mergeCommit ) ) {
  if( merger.failed() {
    throw new IllegalStateException( "Should not happen with in-core mergers" );
  }
  // inspect merger.getMergeResults() for further details
}
Другие вопросы по тегам