使用 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
}
这很简单:如何模拟命令
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
}