如何在`magit`中恢复旧提交的更改?

25

我知道如何从旧的提交中获取差异: 进入*magit-log*,并点击提交。如何逆转应用差异中的特定更改? 我希望它只修改文件(和缓冲区,如果打开)。


2
你可以使用 E 进行交互式变基,并使用 v 撤销更改。 - abo-abo
2个回答

36

我本来想提供一种在vc模式下实现的方式,但这个问题让我发现了你想要的东西(我认为是这样)。

将光标移到您想要还原的更改处,然后键入v(magit-revert-item)。

如果您转到magit-status窗口,您会看到有一个未暂存的更改,其反向更改。

比vc-mode方式容易得多,vc-mode方式需要使用C-c C-r(diff-reverse-direction),然后使用C-c C-a(diff-apply-hunk)。

在我看来,任何一种方式都非常方便。


3
像其他Magit函数一样,如果必要的话,你可以仅对标记区域执行此操作。你可能需要确保光标位于区域内部(至少曾经需要这样做才能对区域进行暂存或取消暂存)。如果你将它标记的方向“错了”,则可以使用C-x C-x来更正。 - phils
2
lukstafi: C-h m C-s revert ? 卢克斯塔菲:C-h m C-s revert - phils
我相信这应该是大写的 V?更具体地说,就像 https://magit.vc/manual/magit/Reverting.html 中描述的 V v - Supernormal
在从magit日志进入的magit rev模式中,现在的快捷键是“_”,然后有一堆选项,但这里相关的是“o”用于还原块,“O”用于还原提交。当你在该模式下按“?”时,我看到的版本中没有“v”或“V”的选项。不过,这是spacemacs,也许“v”和“V”被覆盖以保持视觉模式正常工作。我认为真正的答案是使用“?” :) - Tom Willis

0

前往您想撤消的代码块,然后按下C-u C-c C-a


Emacs 告诉我这是未定义的。 - Supernormal
1
也许它在您的配置文件中绑定到另一个键。该命令是 diff-apply-hunk(默认情况下绑定到 diff-mode 中的 C-c C-a)。 - Stefan

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