git revert --no-commit 不分期

Posted

技术标签:

【中文标题】git revert --no-commit 不分期【英文标题】:git revert --no-commit without staging 【发布时间】:2016-02-13 22:53:00 【问题描述】:

通常,git revert 命令会自动创建一些提交,其中包含提交日志消息,说明哪些提交已被还原。

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

但是在这个命令之后,恢复的文件在暂存区。我可以使用命令git reset HEAD 取消暂存它们。

有没有直接的方法可以在不提交和暂存的情况下恢复提交?

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

【问题讨论】:

这会是什么样子?如果您没有可以还原它的更改,“还原”是什么意思? 我只想要应用了还原更改的本地文件,没有提交,也没有处理暂存区域。如果您执行 git revert -n <HASH> && git reset HEAD 会发生这种情况,但我想立即执行。 啊哈,我明白了 - 所以您希望将还原的更改应用于工作目录但不暂存。重新阅读您的问题后,这似乎很清楚,但我的第一次阅读并没有正确解析该含义。 可能是我的错,我试图澄清我在问题中的意图。 @sschuberth:这是两个步骤。当然它不会伤害,但我只是想知道是否有直接的方法来实现它。 【参考方案1】:

没有单独的命令。正如您已经指出的,您可以将git revert -ngit reset 结合起来,以在索引中撤消还原。

除了那个方法,你可以使用git apply -R来“反向应用”一个补丁,你可以使用git show将一个提交变成一个补丁,所以:

$ git show <rev> | git apply -R

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

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

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

【讨论】:

我得到 error: unrecognized input 。知道可能出了什么问题吗? @RobertPankowecki:google.com/search?&q=git+apply+unrecognized+input 在 *** 关于彩色差异的帖子中首次受到关注。这似乎是最有可能出现的问题。 那么在制作git revert --no-commit之后我该如何继续呢?当我执行git revert --continue 时,什么也没有发生。 @Dr_Zaszuś:在git revert --no-commit 之后,你就照常工作:如果你喜欢编辑文件,git add 如果/当你喜欢,git rm 如果/当你喜欢,最后, git commit.

以上是关于git revert --no-commit 不分期的主要内容,如果未能解决你的问题,请参考以下文章

git merge的使用

git revert和git reset的区别

git revert 某一个文件

git revert和git reset的区别

git revert和git reset的区别

git revert 与 git reset