git revert --no-commit 没有暂存

git revert --no-commit without staging

通常命令 git revert 会自动创建一些带有提交日志消息的提交,说明哪些提交已还原。

要避免自动提交,可以选择 -n(或 --no-commit)。

但是执行此命令后,还原的文件位于临时区域中。我可以使用命令 git reset HEAD.

取消暂存它们

是否有一种无需提交和暂存即可直接还原提交的方法?

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

没有针对它的单一命令。正如您已经指出的,您可以将 git revert -ngit reset 结合使用以在索引中撤消还原。

除了那个方法,你可以用git apply -R来"reverse apply"一个补丁,你可以用git show把一个提交变成一个补丁,所以:

$ git show <rev> | git apply -R

具有相同的效果,但有一个重要(但微妙)的区别。让我引用 git revert 文档并添加我自己的重点:

-n, --no-commit
Usually the command automatically creates some commits with commit log messages stating which commits were reverted. This flag applies the changes necessary to revert the named commits to your working tree and the index, but does not make the commits. In addition, when this option is used, your index does not have to match the HEAD commit. The revert is done against the beginning state of your index.

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