JGit 检出之前的提交

JGit checkout previous commit

如何让JGit检出它的父节点?例如,如果我在 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

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

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

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

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

例如:

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

请注意检查提交 detaches HEAD