如何还原修改后的文件而不影响libgit2中的索引数据?

问题描述 投票:-1回答:1

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");

我的问题操作步骤:

  1. 创建一个新项目并将其添加到git中以进行版本控制

  2. 使用git update-index --skip-worktree排除* .doc

  3. 使用git ls文件-v。 |使用Grep ^ s查看排除文件的列表
  4. 调用libgit2提供的git_reset之后] >>

  5. 使用git ls文件-v.grep ^ s查看先前的标记已丢失。

  6. 使用git_reset进行文件回退会导致--skip-worktree标志丢失。

还有其他方法可以实现工作空间还原而不影响我的索引数据。就像git命令:“ /命令:还原/路径文件:“ xxx.txt””

git命令是“ $ git reset --soft HEAD ^”,用于还原修改文件。我可以使用git_reset(repo,commit,GIT_RESET_HEAD,选项)在libgit2中实现它,但是,我发现它将改变我的索引...

libgit2 git-reset
1个回答
0
投票

我在使用git_reset还原libgit2中的modefy文件时遇到了相同的问题。旧代码保留为已暂存状态,这意味着尽管移动了HEAD,但实际上并未应用任何更改。你有没有解决这个问题?

© www.soinside.com 2019 - 2024. All rights reserved.