使用JGit中止合并

时间:2015-04-22 19:23:50

标签: git jgit

这非常简单:如何模拟命令 JGit中的git merge --abort?我需要在真正的合并之前“预览”冲突

1 个答案:

答案 0 :(得分:2)

JGit中没有git merge --abort的直接等价物。此代码段可以作为起点:

// 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
}