git - 使用 JGit 中止 merge

标签 git jgit

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

最佳答案

在 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();

它清空 merge 状态文件,然后将索引和工作目录重置为当前 HEAD 提交的内容。

为了测试两个提交是否可以 merge ,您还可以使用核心 merge 。这将避免将冲突的提交 checkout 到工作目录中,以便稍后重置它们。

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 - 使用 JGit 中止 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29807016/

相关文章:

git - 如何使用 Git 检索与 TFS 2013 中的构建关联的变更集?

git - 严重损坏的 git 存储库

sha1 - 如何使用JGit从SHA1 ID字符串获取RevCommit或ObjectId?

java - 有没有办法测试是否有人使用 JGit 从本地存储库推送到远程存储库?

git - 如何在不使用 jgit checkout 的情况下在远程存储库中创建 git 分支

git - Jenkins bitbucket 集成

git - 有没有办法让 git 记住 WebDAV Remote 的密码?

git - 使用 JGit 更新子模块时出现 MissingObjectException

c++ - cmake:在主 cmakelists 中使用之前从 git 检索库

git - 从 JGit 中的 RevCommit 对象获取提交信息