【问题标题】:Find commits on one branch that aren't on another with JGit使用 JGit 在一个分支上查找不在另一个分支上的提交
【发布时间】:2019-11-11 22:12:20
【问题描述】:

我正在尝试在分支 foo 上查找不在 master 上的提交。我在简单的情况下使用此功能,但是一旦将新更改从 master 合并到 foo 中,它就会崩溃。

更详细的:

  • 如果您在master 上有提交 A、B 和 C
  • 然后你创建分支foo 并在那里添加提交 D 和 E
  • 然后你在master 上创建提交 F
  • 然后将 F 从 master 合并到 foo(使用合并提交)

现在尝试获取合并基数返回 F 而不是 C。所以我不能迭代从Cfoo 头部的提交(给出CDEF,然后我将缩小到D 和@ 987654341@ 使用isMergedInto)

public RevCommit findMergeBase(ObjectId foo, ObjectId bar) throws MissingObjectException,
        IncorrectObjectTypeException, IOException {
    RevWalk walk = null;

    try {
        walk = new RevWalk(repo);
        RevCommit fooHead = walk.parseCommit(foo);
        RevCommit barHead = walk.parseCommit(bar);

        walk.setRevFilter(RevFilter.MERGE_BASE);
        walk.markStart(fooHead);
        walk.markStart(barHead);

        RevCommit base = null;
        while (true) {
            RevCommit commit = walk.next();
            if (commit == null)
                break;

            base = commit;
        }

        return base;
    }
    finally {
        if (walk != null) {
            walk.reset();
            walk.close();
            walk.dispose();
        }
    }
}

【问题讨论】:

  • 查看这里如何在 JGit 中找到合并基:stackoverflow.com/questions/26434452/…
  • @RüdigerHerrmann 是的,我相信我正在该问题中解释的内容,只是没有产生预期的结果
  • 在答案中,返回第一次调用walk.next() 的结果,你的代码做了不同的事情。
  • @RüdigerHerrmann 好的。我不确定我从哪个例子中获取了 while 循环,但我得到了相同的结果,只是将第一次调用返回到 walk.next()

标签: jgit


【解决方案1】:

似乎问题可能是我由远程主分支的功能分支创建的?所以它无法弄清楚功能分支如何连接到我的本地主服务器?一旦我更新了我的本地主分支,它就会按预期工作。

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2015-07-06
    • 2011-11-25
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多