如何在 JGit 中从一个 git 分支硬重置到另一个分支?

Posted

技术标签:

【中文标题】如何在 JGit 中从一个 git 分支硬重置到另一个分支?【英文标题】:How to hard reset from one git branch to other in JGit? 【发布时间】:2015-12-20 14:10:45 【问题描述】:

我有两个分支,一个是 master,另一个是 level1。现在 level1 是最新的我需要在 git bash 中将 master 硬重置为 level1 我可以通过以下命令来做到这一点。

$ git checkout master
$ git tag old-master-branch 
$ git reset --hard level1
$ git merge -s ours origin/master 
$ git push origin master

这个对我来说很好用。我的问题是如何通过使用 JGit 来实现它。我试过了。但是我不知道如何设置源分支和目标分支。

考虑一个我已经克隆了一个主分支的场景

 Git git = Git.cloneRepository().setURI(remote).setCredentialsProvider(new UsernamePasswordCredentialsProvider("obuli", "xxxxxx")).setDirectory(gitPath)                    .setNoCheckout(true).call();

现在我需要将其硬重置为级别 1。

git.reset().setMode(ResetType.HARD).call();

但这里我没有指定 level1 。我不知道如何指定它。并请说明如何在 JGit 中提供git merge -s ours origin/master

【问题讨论】:

请在每个帖子中提出一个问题。要在 JGit 中合并分支,请参见此处:***.com/questions/12138659/how-to-merge-in-jgit 或 - 如果这不能回答您的问题 - 发布一个单独的问题。 【参考方案1】:

默认情况下,ResetCommand 重置为 HEAD。要重置到另一个分支,您需要使用setRef() 指定此分支。

例如:

git.reset().setMode(ResetType.HARD).setRef("refs/heads/level1").call();

上面的命令会让当前分支指向level1的最新提交,并将其状态检出到工作目录中。

【讨论】:

以上是关于如何在 JGit 中从一个 git 分支硬重置到另一个分支?的主要内容,如果未能解决你的问题,请参考以下文章

如何在SVN中从一个分支合并到另一个分支并再次返回(双向合并)?

使用 jgit 创建远程和本地分支

JGit Java Git 库取消暂存文件

如何在 Python 中从需求安装中包含 git 分支? [复制]

如何避免在codemagic中从git触发构建

Git:如何防止特定的提交被合并到另一个分支中?