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