【问题标题】:Abort merge using JGit使用 JGit 中止合并
【发布时间】:2015-06-30 16:03:09
【问题描述】:

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

【问题讨论】:

    标签: git 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 中的提交。
    猜你喜欢
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 2016-07-22
    • 1970-01-01
    • 2019-07-24
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多