git revert --no-commit without staging

lor*_*ova 41 git git-revert

通常,该命令会git revert自动创建一些提交日志消息,提交哪些提交已被还原.

为了避免自动提交,有选项-n(或--no-commit).

但是在此命令之后,恢复的文件位于暂存区域中.我可以使用该命令取消它们git reset HEAD.

是否有直接的方法来恢复提交而不提交和暂存?

换句话说:是否有直接命令来恢复仅将更改应用于工作目录的提交,而不触及索引?

tor*_*rek 41

它没有单一的命令.正如您已经指出的那样,您可以结合git revert -n使用git reset以在索引中撤消恢复.

除了该方法,您可以使用git apply -R"反向应用"补丁,并且可以将提交转换为补丁git show,因此:

$ git show <rev> | git apply -R
Run Code Online (Sandbox Code Playgroud)

具有相同的效果,有一个重要的(但微妙的)差异.让我引用git revert文档并加上我自己的重点:

-n, --no-commit
通常,该命令会自动创建一些提交日志消息,提交哪些提交已被还原.此标志应用将命名提交还原到工作树和索引所需的更改,但不进行提交.此外,使用此选项时,索引不必与HEAD提交匹配.恢复是针对索引的开始状态完成的.

换句话说,git revert -n 在索引中操作,在索引上操作,副作用是更新工作树.该git apply命令仅在工作树上运行(默认情况下,无论如何),实际上可以在git存储库外部使用.