编程语言
首页 > 编程语言> > java – 如何使用jgit库将git HEAD指向特定的ref?

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

作者:互联网

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

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

编辑

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

解决方法:

这对我有用: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会改变工作树和索引.

希望发布这个问题和答案将节省其他人我花在它上面的时间.

标签:jgit,java,git
来源: https://codeday.me/bug/20190826/1727080.html