JGit:推送到特定分支

JGit:推送到特定分支,git,branch,push,jgit,Git,Branch,Push,Jgit,我在github上有两个分支:master和development。 我想将新创建的文件推送到开发分支 String user = "user"; String password = "password"; String localPath = "local"; String remotePath = "https://github.com/some/git.git"; Git.cloneRepository().setBranch("refs/heads

我在github上有两个分支:master和development。 我想将新创建的文件推送到开发分支

    String user = "user";
    String password = "password";
    String localPath = "local";
    String remotePath = "https://github.com/some/git.git";
    Git.cloneRepository().setBranch("refs/heads/development").setURI(remotePath).setDirectory(new File(localPath)).call();
    Git localGit = Git.open(new File(localPath));         
    localGit.checkout().setName("origin/development").setUpstreamMode(SetupUpstreamMode.TRACK).call();

    new File("local/test").createNewFile();

    localGit.add().addFilepattern(".").call();
    localGit.commit().setMessage("message").call();
    localGit.push().setCredentialsProvider(new UsernamePasswordCredentialsProvider(user, password)).call();
我得到的是一个

  TransportException: Nothing to push.
有什么问题吗

更新:
我可以通过删除checkout命令使其工作。因为克隆已经签出了指定的分支,我以前不清楚

通过签出
origin/development
(即“
origin
”)您已经创建了一个与0本地分支关联的头(即,不是与
refs/head/development
,而是与
refs/remotes/origin/development

这就是为什么
git push
返回“nothing to push”,因为没有本地分支接收到任何新的提交to push

您需要确保:

  • 签出本地“
    development
    ”分支(您使用
    .setBranch(“development”)
    ,尽管我更喜欢使用
    .setBranch(“refs/head/development”)
    ,以确保引用本地分支)
  • 使“
    起源/发展
    ”成为“
    发展
    ”的上游分支。
    或者至少,像这样,使用正确的refspec
    development:development

好的,localGit.checkout().setName(“origin/development”).setUpstreamMode(setUpstreamMode.TRACK).call()也应该如此;达到理想的结果因为即使这样,我也会收到相同的错误消息:TransportException:无需推送。此外,当我执行git状态时,我看到头部仍然被分离。我不知道如何解决这个问题。当我查看HEAD时,在我签出之前,它是ref:refs/heads/development。结帐后,我有5750AFE0339795F1E31C5C2298842636F7DB53357(这就是头部分离的原因,对吗?)花了我一点时间来完全理解并使其工作,但你给了我所有需要的信息。谢谢@汉斯:太好了!移除签出是最简单的解决方案,避免签出远程跟踪分支(这是获得分离头和“无需推动”的最可靠方法)