java - JGit check out 之前的提交

标签 java git jgit

如何告诉 JGit check out 它的父节点?例如,如果我在 master 分支上遇到如下情况:

c815b27 newestCommit (HEAD -> master, origin/master, master)
e46dcaf previousCommit
b2d6867 previousPreviousCommit

我想从 JGit 调用一个看起来像这样的命令:

git.checkout().setName("c815b27~").call();

并且会导致 HEAD 被移动到提交 e46dcaf 的状态:

c815b27 newestCommit (origin/master, master)
e46dcaf previousCommit (HEAD)
b2d6867 previousPreviousCommit

但是,当我调用上面的 checkout 语句时,没有任何反应。我也遇到过以下声明,它也不会移动 HEAD:

git.checkout().setStartPoint("c815b27~").call();

关于如何基于波浪号 (~) 或插入符 (^) 符号实现移动到上一个提交的任何想法,以及 JGit API 是否可行?

最佳答案

首先,您需要解析指向上一次提交的表达式。然后您可以检查生成的提交 ID。

例如:

ObjectId previousCommitId = git.getRepository().resolve( "HEAD^" );
git.checkout().setName( previousCommitId ).call();

注意 checkout 提交 detaches HEAD .

关于java - JGit check out 之前的提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43102701/

相关文章:

Git 将 pull 请求从一个存储库移动到另一个存储库

rename - 如何在 JGit 中重命名文件

java - JGit - 如何重用 DiffFormatter

java - JGit:在分支中的提交处读取文件的内容

java - 需要具有 FBO 扩展的 OpenGL 2.0 或更高版本 - LibGDX 错误

java - 如何使用 mysql 或 java(jdbc) 查找排名

java - 具有负载平衡扩展的 OSGi 扩展器模式

java - 在Selenium Webdriver中实例化chrome浏览器的步骤是什么?

git - 为什么 git 仍在跟踪扩展名已添加到 .gitignore 文件的文件

git - 无法符号链接(symbolic link) share/git-core/contrib/usr/local/share/git-core 不可写