我怎么能用magit来分辨单个文件?

说我已经做了一些无关的更改,以解耦我的git仓库中的文件。 我想单独检查并提交每个文件。

我运行magit-status ,并获得更改文件的列表。 但是我能find的唯一的魔法差异命令( dD )区分整个修改,而不是单个文件。

我想要git diff <filename>的输出,但是在magit diff缓冲区中。 我怎样才能得到magit只差一个文件?

Magit可以直接从magit-status缓冲区中“分别查看和提交每个文件”,而不需要任何单独的diff缓冲区。

您只需展开您感兴趣的文件(使用TAB ,它将显示文件的差异点); 那么你可以使用s来分阶段地(或者不分档)来分阶段地提交它们(或者是整个文件,或者是个别的区块,甚至是一个标记的区域)。 重复所有涉及该提交的更改,并且一旦所有必要的操作都已经完成,请按c开始提交。

nb如果你真的想在一个单独的缓冲区中查看一个文件的差异,你可以在该文件的缓冲区中使用绑定到Cx v =的 vc-diff 。 (这是Emacs的默认function,不是Magit的一部分)。

(编辑:由于aap的评论而改写的答案,现在看起来与当时的意思相反)。

我build议观看由magit的创造者的video。 这是20分钟,它显示了你的工作stream程,因为它是有意的。

此外,一个小提示:您可以使用1 2 3来更改当前标题的差异度。

另一个小技巧:如果你不喜欢大块的大小,你可以通过 – 任意区域 – 标记一个区域并按下s 。 这是魔法。 我不知道这个选项有一段时间,我实际上是回到控制台,并做旧的方式git add -p

使用工具时不要碰到粮食肯定有好处,如其他答案所示。

另一方面,有时候你只是想告诉你的编辑该做什么,并且让互联网上的人回答你的问题,而不是告诉你想要做别的事情。

magit通过Mx magit-file-popup提供了一个菜单界面来处理当前文件。 你需要从这里按的键是“du”。 这可能是你太多的按键,如果是这种情况,你可以直接调用magit-diff

(magit-diff "master" nil (list buffer-file-name))

您可能想为此定义自己的函数和键绑定。

magit-diffvc-diff magit-diff有优势,因为如果允许你跳转到diff的位置。