使用 JGit 中止合并
Posted
技术标签:
【中文标题】使用 JGit 中止合并【英文标题】:Abort merge using JGit 【发布时间】:2015-06-30 16:03:09 【问题描述】:这很简单:如何模拟命令
git merge --abort
在 JGit 中?我需要在真正合并之前“预览”冲突
【问题讨论】:
【参考方案1】:在 JGit 中,git merge --abort
没有直接的等价物。这段代码 sn -p 可以作为起点:
// 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 提交的内容。
为了测试两个提交是否可以合并,您还可以使用 in-core 合并。这样可以避免将冲突的提交检出到工作目录中,以便稍后重置它们。
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
【讨论】:
“mergeCommit”是 FETCH_HEAD 吗?mergeCommit
是应该合并到 HEAD 中的提交。以上是关于使用 JGit 中止合并的主要内容,如果未能解决你的问题,请参考以下文章