假设我在我的 git 存储库中对未耦合的文件进行了许多不相关的更改。我想分别审查和提交每个文件。
我运行magit-status
,并获取已更改文件的列表。但我能找到的唯一 magit diff 命令(d
和D
)区分整个修订,而不是单个文件。
我想要git diff <filename>
, 但在 magit diff 缓冲区中的输出。我怎样才能让 magit 只区分一个文件?
Magit 使您能够直接从magit-status
缓冲区“分别查看和提交每个文件”,而无需任何单独的差异缓冲区。
您只需展开您感兴趣的文件(使用TAB,它会向您显示该文件的差异);然后您可以将要提交的部分(整个文件,或单个大块,甚至标记的区域)暂存到暂存s(或u取消暂存)。对该提交中涉及的所有更改重复此操作,一旦所有必要的内容都已上演,请按c开始提交。
您可能更喜欢通过使用(重复)获得的可见性循环C-TAB行为,而不是默认情况下使用TAB.
如果您确实想在单独的缓冲区中查看文件的差异,您可以通过直接调用文件的缓冲区或magit-diff-buffer-file
使用. 例如:dmagit-file-popup
(global-set-key (kbd "C-c m d") 'magit-diff-buffer-file)
(global-set-key (kbd "C-c m f") 'magit-file-popup)
另请注意以下@assem 的评论:
您可能还对默认
magit-ediff
绑定到哪个感兴趣e,并在此时为 diff/file 打开一个 ediff 会话。
默认情况下,Emacs 中可用的其他一些替代方案(即不是 Magit)是:
vc-diff
vc-ediff
对于 ediff 等价物ediff-revision
创建具有更多选项的 ediff 会话我绑定vc-ediff
到,C-xvC-=以便这两个变体具有相似的键绑定。
我建议观看magit 的创建者的视频。这是 20 分钟,它向您展示了预期的工作流程。
此外,还有一个小提示:您可以使用它1 2 3来更改当前标题的 diff 详细程度。
另一个小提示:如果您对大块的大小不满意,您可以通过 -没错- 标记一个区域并按下来展示任意区域s。这是魔法。我有一段时间不知道这个选项,我实际上是回到控制台并git add -p
以老式的方式进行操作。
使用工具时不违背规则肯定有好处,正如其他答案所例证的那样。
另一方面,有时你只想告诉你的编辑该做什么,让互联网上的人回答你的问题,而不是告诉你想做其他事情。
magit提供了一个菜单界面,通过M-x magit-file-popup
. 您需要从这里按下的键是“du”。这对您来说可能按键太多,如果是这种情况,您可以magit-diff
像这样直接调用:
(defun magit-diff-given-file (&optional file)
(interactive)
(unless file
(setf file buffer-file-name))
(magit-diff-working-tree "HEAD" nil (list (file-relative-name file (magit-toplevel file)))))
您可能想为此定义自己的函数和键绑定。
magit-diff
有优势,vc-diff
因为 if 允许您跳转到 diff 的位置。