我试图复制命令"git ( commit )“的行为,其中(commit)是对特定提交的引用,而不是分支名称。
使用此命令时,存储库的“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 conflicts prevent checkout崩溃有没有一种不使用Repository.reset(ref, pygit2.GIT_RESET_HARD)来复制这种行为的方法?
发布于 2017-05-15 14:17:12
低级别的签出是git read-tree -um HEAD $target && git update-ref HEAD $target; pygit2显然只懂一棵树的读取,而没有任何选项,所以它正在进行签出和合并,以及任何其他操作,它提供的只是实际git的一个粗略的模拟。看起来,您可以在提交中添加一个引用,检查它,然后重置HEAD并删除这个ref。
发布于 2018-11-08 23:30:33
repo.checkout_tree可以直接使用提交。完成之后,您仍然需要set_head。此外,如果您想要“git重置”等效的话,将以下策略传递给checkout_tree:pygit2.GIT_CHECKOUT_FORCE | pygit2.GIT_CHECKOUT_RECREATE_MISSING
https://stackoverflow.com/questions/43886483
复制相似问题