使用 JGit 中止合并

Abort merge using JGit

这很简单:如何模拟命令 git merge --abort 在 JGit 中?我需要 "preview" 真正合并之前的冲突

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