//code
void RevertTest()
{
git_object *head_commit_obj = NULL;
int error = git_revparse_single(&head_commit_obj, repo, "HEAD~1");
if (error < 0)
{
return;
}
git_commit *head_commit = (git_commit *)head_commit_obj;
git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
opts.checkout_strategy = GIT_CHECKOUT_SAFE;
int reset_result = git_reset(repo, (git_object *)(head_commit_obj), GIT_RESET_HARD, &opts);
if (reset_result < 0)
{
return;
}
}
我的问题操作步骤:
创建一个新项目并将其添加到git中以进行版本控制
使用git update-index --skip-worktree排除* .doc
使用git ls文件-v。 | Grep ^ s查看排除文件的列表调用libgit2提供的git_reset之后
使用git ls-files -v.grep ^ s查看先前的标记已丢失。
使用git_reset进行文件回退会导致--skip-worktree标志丢失。
还有其他方法可以实现工作空间还原而不影响我的索引数据。就像git命令:“ /命令:还原/路径文件:“ xxx.txt””
这是a bug; libgit2应该尊重索引中的skip-worktree
位,但不是。