Прервать слияние с помощью 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
}