3

我想以编程方式更新 HEAD 而不执行结帐或基于非裸回购。

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

编辑

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

4

2 回答 2

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。如果适用,请使用其中之一。

这些都不适用:结帐和变基会改变工作树和索引。

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

于 2012-08-27T18:51:33.707 回答
0

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

于 2012-09-01T08:37:04.987 回答