ChatGPT解决这个技术问题 Extra ChatGPT

Magit 还原单个文件

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

我只有一个本地 Git 存储库。如何将选定的文件恢复到以前的版本?我相信为此的 Git 命令必须是 git checkout HEAD^ path/to/file 之类的东西,但我在这里也可能错了,只是猜测而已。

我正在寻找的内容与 vc-dir 缓冲区中的 Cx v u 基本相同。

本质上,我希望做的是:

删除修改的文件。

从本地仓库中提取。

但是 Magit 似乎无法做到这一点,它似乎更喜欢只删除文件,而不是恢复它。

(1) Magit 历史缓冲区肯定支持这一点(虽然我不记得如何),您是否需要其他方式(例如在 *magit-status* 中)? (2) 如果你只想恢复到基础,为什么不使用vc次要模式C-x v u
您是在谈论丢弃未提交的更改(即恢复到当前提交的版本),还是恢复到先前的提交? git checkout HEAD file 将丢弃未提交的更改。 git checkout HEAD^ file 还将恢复在最近一次提交到存储库时对文件所做的更改(如果有)。如果该提交不涉及相关文件,则 ^ 实际上是多余的。根据您的“删除和拉取”摘要,您只想丢弃未提交的更改,在这种情况下,Rémi 的答案就是您想要的。

e
e19293001

在 magit 中,您只需要继续处理要还原的块或文件,然后使用 k 放弃修改。有关更多详细信息,请参阅 https://magit.vc/manual/1.4/magit/Staging-and-Committing.html 中的相关文档。


该操作取决于您使用它的位置。如果文件未被 git 跟踪,它将删除该文件。但是如果文件被跟踪,它会丢弃修改。请注意,一旦您的文件在 git 中,就很难将其从历史记录中完全删除。
我认为它也可以在 commit 之后反向使用:如果您已将文件与其他更改一起提交,您可以使用 v revert,然后 k 反向更改您想要的位置保留更改。
R
Razzi Abuissa

打开文件后,您可以M-x magit-file-checkout


哪个版本的 emacs/magit?
自 Magit 2.3.0 起可用。
magit-checkout-file 已弃用,请改用 magit-file-checkout
这是一个很好的补充,但也有很多提示。我想知道是否有办法在点使用 fie 并默认为 HEAD