如何使用jgit库将git HEAD指向特定的ref?

时间:2012-08-27 18:51:34

标签: java git jgit

我想以编程方式更新HEAD,而不对非裸仓库执行checkout或rebase。

我希望工作树和索引在操作后保持不变。

修改

我需要更新HEAD的符号目标,而不是HEAD当前目标的提交ID。这更像是一个结账,而不是其他任何东西,除了我不能使用org.eclipse.jgit.api.CheckoutCommand,因为它要求我更新路径,但我不想触摸工作树。 org.eclipse.jgit.api.CreateBranchCommand也不合适,因为它需要一个特定的起点,因为我正在创建一个孤儿分支而不存在。

2 个答案:

答案 0 :(得分:6)

这对我有用:RefUpdate.link()

示例:

Result updateHead(
    Repository repo, String newHead, boolean force, boolean detach
) throws IOException {
    RefUpdate refUpdate = repo.getRefDatabase().newUpdate(Constants.HEAD, detach);
    refUpdate.setForceUpdate(force);
    return refUpdate.link(newHead);
}

答案隐藏在jgit源代码中的大约5个位置。

jgit v2.0.0.201206130900-r中的三个api命令为您更新HEAD:clone,checkout和rebase。如果适用,请使用其中之一。

这些都不适用:checkout和rebase会改变工作树和索引。

希望发布这个问题和答案可以节省其他人花在上面的时间。

答案 1 :(得分:0)

尝试org.eclipse.jgit.api.ResetCommand并将其模式设置为SOFT