首页 > 解决方案 > 在 JGIT 中创建分支时出现 RefNotFoundException

问题描述

我有一个问题,我无法创建本地分支。

Error: org.eclipse.jgit.api.errors.RefNotFoundException: Ref origin/sideMerge cannot be resolved

我已经检查了 Stackoverflow 中的以下主题和其他一些主题,但似乎发生了一些可疑的事情或我还不明白的事情。

有人可以指出我对 Ref 不了解的方向吗?据我所知,本地 refs 从 origin/"other_branch" 开始

代码片段:

Git git;
    CreateBranchCommand tmpCreateBranch;
    git = new Git(existingRepo);
    tmpCreateBranch = git.branchCreate();

    try {
        tmpCreateBranch.setName(tmpBranchName).setStartPoint("origin/" + tmpBranchName).setForce(true).call();
    } catch (Exception e) {
        System.out.println("Error in Branch creation");
        System.out.println(e);
    }

标签: javabranchjgit

解决方案


根据 Git 手册,您可以使用以下语法创建分支。它创建一个名为<branchname>指向当前 HEAD 的新分支头,或者<start-point>如果给定:

git branch [--track | --no-track] [-l] [-f] <branchname> [<start-point>]

因此,您可以按照 JGit 中的类似语法创建本地分支“主题”(参见下一个代码块)。在这种情况下,您没有明确配置起点。JGit 将使用 HEAD 作为起点。所以一切正常:

git.branchCreate().setName("topic").call();

但是,如果您使用 start-point 创建本地分支origin/topic,JGit 将尝试在Git References中找到此引用。在这种情况下,origin是远程topic的名称,是分支的名称。如果未找到,则会引发异常:

git.branchCreate().setName("topic").setStartPoint("origin/topic").call();

您还需要注意:

  • setForce(true)如果分支名称已经存在,则将目标分支名称重置为起点。没有-f,--forcegit branch 拒绝更改现有分支。

推荐阅读