如何用magit区分单个文件?

时间:2013-07-22 21:53:20

标签: emacs git-diff magit

说我在我的git仓库中对未耦合的文件做了一些无关的更改。我想分别查看和提交每个文件。

我运行magit-status,并获取已更改文件的列表。但我能找到的唯一magit diff命令(dD)可以区分整个修改,而不是单个文件。

我想要git diff <filename>的输出,但是在magit diff缓冲区中。我如何让magit只传出一个文件?

3 个答案:

答案 0 :(得分:87)

Magit使您可以直接从magit-status缓冲区“单独查看和提交每个文件”,而无需任何单独的差异缓冲区。

您只需展开您感兴趣的文件(使用 TAB ,它会显示文件的差异点);那么你可以用 s 将你想要提交的部分(整个文件,或者是个体,或者甚至是一个标记的区域)分段到阶段(或 u 去舞台)。对该提交中涉及的所有更改重复此操作,一旦完成所有必要的更改,请按 c 开始提交。

您可能更喜欢使用 C-TAB (重复)获得的可见性循环行为,而不是默认使用 TAB获得的简单切换


如果你确实想在单独的缓冲区中查看文件的diff,可以直接调用magit-diff-buffer-file或使用“diff”选项从文件的缓冲区中执行该操作( d < / {kbd>)在magit-file-popup中。 e.g:

(global-set-key (kbd "C-c m d") 'magit-diff-buffer-file)
(global-set-key (kbd "C-c m f") 'magit-file-popup)

另请注意@ assem的评论如下:

  

默认情况下,你可能也会对{k}> 绑定的magit-ediff感兴趣,并在点上打开diff / file的ediff会话。


默认情况下,Emacs中提供的其他一些替代方案(即不是Magit)是:

  • C-x v = 致电vc-diff
  • M-x vc-ediff等同于ediff
  • M-x ediff-revision创建包含更多选项的ediff会话

我将vc-ediff绑定到 Cx v C - = ,以便这两个变体具有相似的键绑定。

答案 1 :(得分:22)

我建议由magit的创建者观看video。 这是20分钟,它向您展示了工作流程。

另外,一个小提示:您可以使用 1 2 3 进行更改 当前标题的差异冗长。

另一个小提示:如果你对帅哥的大小不满意, 您可以通过 - 正确来标记任意区域 - 标记a 区域并按 s 。这是魔法。 我暂时不知道这个选项,实际上我是 退回到控制台并按照旧式的方式进行git add -p

答案 2 :(得分:1)

使用工具时,不要反对谷物有一定的优势,如其他答案所示。

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

magit 提供了一个菜单界面,用于通过M-x magit-file-popup对当前文件执行操作。你需要从这里按下的键是“du”。对于您来说这可能是太多的按键操作,如果是这种情况,您可以直接调用magit-diff

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

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

magit-diff优于vc-diff,因为如果允许您跳转到差异的位置。