【发布时间】:2014-05-28 22:13:57
【问题描述】:
我想恢复提交,但仅限于某些文件。 (不是结帐;是还原。如果您不熟悉其中的区别,请继续阅读。)
我试过了
git revert --no-commit abcdef123456 -- my/path/to/revert
我得到了这个错误
fatal: ambiguous argument 'my/path/to/revert': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
但这正是我所做的! (是的,my/path/to/revert 在我的工作树中。)
我的工作理论是不可能只恢复某些文件,并且 Git 错误消息具有误导性。
(Git 1.7.9.5)
这不是Reverting a single file to a previous version in git 的重复。
- 这个问题(尽管有标题)与 git-checkout 相关。签出会将文件恢复到以前的版本,并删除该点之后的所有提交。
- 我的问题与 git-revert 有关。还原会撤消在特定提交中所做的更改,而不会触及以后可能出现的其他提交。它应用(仅)该提交的反向。
【问题讨论】:
-
你能解释一下你需要
revert而不是使用checkout吗?据我所知,检出适当的文件,然后提交相当于还原。 -
我认为您无法还原单个文件,您在哪里读到的,它在文档中吗?但是,您可以反向应用补丁,以及 git apply:
git show <commit> -- <path> | git apply -R,在此处找到:git.661346.n2.nabble.com/… -
我认为这可能是这篇文章的副本:stackoverflow.com/questions/2733873/…
-
@ChrisMaes,请参阅我对
checkout和revert之间区别的解释。 -
@PaulDraper,很有趣,显然我多年来一直误解
revert。因此,如果您有提交A(较旧)、B和C,您希望反转来自A的更改,同时保留来自较新提交B和C的更改。
标签: git git-revert