Magit 撤销单个文件更改

89

这个问题是关于Emacs中Magit主要模式的功能,而不是如何通过命令行界面完成此操作。

我只有一个本地Git存储库。 我该如何将所选文件恢复为其以前的版本? 我相信Git命令应该是像git checkout HEAD^ path/to/file这样的东西,但我可能也错了,只是猜测而已。

我需要的基本上就是在vc-dir缓冲区中按C-x v u做的事情。

实际上,我希望做的事情是:

  • 删除修改后的文件。

  • 从本地存储库中提取。

但是 Magit 似乎不能做到这一点,它似乎更喜欢删除文件,而不是还原文件。


(1) Magit历史缓冲区绝对支持此功能(虽然我不记得具体怎么做了),您需要其他方式吗(例如在* magit-status *中)? (2) 如果您只想恢复到基本状态,为什么不使用vc次要模式的C-x v u呢? - lukstafi
1
你是在谈论放弃未提交的更改(即恢复到当前已提交的版本),还是恢复到以前的提交?git checkout HEAD file将放弃未提交的更改。git checkout HEAD^ file也会还原文件中最近一次提交到存储库的更改(如果有)。如果该提交不涉及所讨论的文件,则“^”实际上是多余的。根据您的“删除和拉取”摘要,您只想放弃未提交的更改,这种情况下Rémi的答案就是您想要的。 - phils
2个回答

103

1
操作取决于您在哪里使用它。如果文件未被Git跟踪,则会删除该文件。但是,如果文件已被跟踪,则会放弃修改。请注意,一旦您的文件在Git中,就很难从历史记录中完全删除它。 - Rémi
3
我认为这个方法也可以被合理地反向使用,在你进行了提交(commit)之后:如果你已经将文件与其他更改一起提交,那么你可以使用 v 撤销(revert),然后在需要保留更改的地方使用 k 进行反向更改。 - lukstafi

41

打开文件后,您可以执行M-x magit-file-checkout命令。


你使用的是哪个版本的Emacs/Magit? - dr jerry
1
自Magit 2.3.0版本开始可用。 - Razzi Abuissa
8
magit-checkout-file 已经被弃用,请使用 magit-file-checkout 替代。 - xged
这是一个不错的补充,但也有很多提示。我想知道是否有一种方法可以使用点处的文件并默认为“HEAD”。 - Andrea Richiardi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接