在 git 中切换分支时,如何让 Emacs 恢复所有未更改的缓冲区?

Posted

技术标签:

【中文标题】在 git 中切换分支时,如何让 Emacs 恢复所有未更改的缓冲区?【英文标题】:How can I get Emacs to revert all unchanged buffers when switching branches in git? 【发布时间】:2010-10-14 12:22:48 【问题描述】:

通常,当我在 git 中切换分支时,如果文件在 emacs 中打开,那么即使内容相同,emacs 也会询问我是否要还原它们(因为它认为它们在磁盘上已更改)。

首先,如果磁盘上的内容与缓冲区中的内容相同,我想找到一种方法让 emacs 根本不询问我。

其次,我想要一个命令,它可以还原(不进行查询)我所有没有未保存更改的打开缓冲区,并询问我那些确实有未保存更改的缓冲区。

或者,我愿意接受有关我可以尝试的其他解决方案、工作方式等的建议。如果人们可以指点我从哪里开始,我会非常乐意编写 emacs-lisp。

PS 如果这很重要,我会在 OSX 上使用 Aquamacs。

编辑:

嗯,我发现 revbuffs 包正是我所需要的。当然足以阻止我想尝试自己写任何新东西。 (我将 revbuffs 映射到 Cmd-R,效果非常好。有点类似于其他 Mac 应用程序中的 Cmd-R)。

全局自动恢复模式本来是一个完美的解决方案,我希望我可以选择两个答案。我更喜欢 revbuffs 仅仅是因为一种可能是非理性的想要控制所发生的事情的感觉。

我猜想如果我从 emacs 中访问 git,那么它可能会更容易处理,但我目前更喜欢通过命令行访问 git。 (我使用 emacs 的时间还不够长,无法将其作为我的操作系统)。不过我会更彻底地调查一下 magit。

编辑2:

我已经使用 magit 一年了,强烈推荐它在 emacs 中处理 git。但是,每当我在 emacs 之外进行 rebase 时,我仍然使用 revbuffs。

【问题讨论】:

我知道这很古老,但我喜欢 Singletoned 的推理,并且在 github github.com/capitaomorte/revbufs 上有一点 revbufs 的 fork 【参考方案1】:

也许您想要全局自动恢复模式。尝试运行global-auto-revert-mode,如果您喜欢,可以将(global-auto-revert-mode) 添加到您的~/.emacs 文件中。

【讨论】:

【参考方案2】:

试试revbufs package:

revbufs.el 是一个小型 Emacs 包,当您在 Emacs 中和通过外部工具(例如,Jomtool 等代码生成器)编辑文件时,它可以安全地恢复您的缓冲区...

【讨论】:

有什么方法可以让它自动化吗?正如 Singletoned 在他的编辑中提到的那样,您必须将其绑定到一个键。【参考方案3】:

当您激活magit-ionotify-mode 时,Magit 包会自动执行此操作(Linux 上的 inotify 需要 emacs 24.4)。它的描述你可以找到here。

【讨论】:

以上是关于在 git 中切换分支时,如何让 Emacs 恢复所有未更改的缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章

【学了就忘】Git分支 — 44.分支切换的几种情况

当 Jupyter 笔记本在一个分支上运行时,如何安全地切换 Git 分支?

emacs建议恢复文件,但我错过了:如何让它提示?

你如何让 git 总是从特定的分支中提取?

重新提交在 git 中恢复的提交

git切换分支时,如何保存当前分支的修改(暂时不想提交)