git命令是“ $ git reset --soft HEAD ^”,用于还原修改文件。而且我可以使用git_reset(repo,commit,GIT_RESET_HEAD,选项)在libgit2中实现它,但是,我发现它将改变我的索引数据。当我使用git_reset API时。我的代码是:
bool Revert() {
int error;
git_object *head_commit_obj = NULL;
error = git_revparse_single(&head_commit_obj, repo, "HEAD~1");
if (error < 0)
{
return false;
}
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 false;
}
printf("Done reverting\n");
我的问题操作步骤:
创建一个新项目并将其添加到git中以进行版本控制
使用git update-index --skip-worktree排除* .doc
调用libgit2提供的git_reset之后] >>
使用git ls文件-v.grep ^ s查看先前的标记已丢失。
使用git_reset进行文件回退会导致--skip-worktree标志丢失。
还有其他方法可以实现工作空间还原而不影响我的索引数据。就像git命令:“ /命令:还原/路径文件:“ xxx.txt””
git命令是“ $ git reset --soft HEAD ^”,用于还原修改文件。我可以使用git_reset(repo,commit,GIT_RESET_HEAD,选项)在libgit2中实现它,但是,我发现它将改变我的索引...
我在使用git_reset还原libgit2中的modefy文件时遇到了相同的问题。旧代码保留为已暂存状态,这意味着尽管移动了HEAD,但实际上并未应用任何更改。你有没有解决这个问题?