我试图复制命令“git checkout(commit)”的行为,其中(commit)是对特定提交的引用,而不是分支名称.
使用此命令时,存储库的“HEAD”指向提交(分离的头),工作目录与此提交中的状态相同.
目前,我设法使存储库的HEAD指向使用PyGit2的提交:
def go(self, repo_name, version):
repo = pygit2.Repository(bdd[repo_name])
#commit = repo.revparse_single(version)
#repo.reset(version, pygit2.GIT_RESET_HARD)
repo.set_head(pygit2.Oid(hex=version))
print repo.head_is_detached
我的问题是我找不到如Git CLI那样回滚工作目录的方法.
我试过用:
> repo.checkout_head():它对工作目录没有任何作用.
> repo.checkout():使用GitError崩溃:X冲突阻止结帐
有没有办法在不使用Repository.reset(ref,pygit2.GIT_RESET_HARD)的情况下复制此行为?
最佳答案 低级结账是git read-tree -um HEAD $target&& git update-ref HEAD $target; pygit2显然只理解单树读取而没有任何选项,所以它正在进行结账和合并以及任何其他操作,它提供的不仅仅是实际git的粗略模型.看起来你可以通过在你的提交中添加一个ref来检查它,检查出来,然后重置HEAD并删除ref.