python – 使用PyGit2复制“git checkout”

我试图复制命令“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.

点赞