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 -n
与git 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 不分期的主要内容,如果未能解决你的问题,请参考以下文章