说我在我的git仓库中对未耦合的文件做了一些无关的更改。我想分别查看和提交每个文件。
我运行magit-status
,并获取已更改文件的列表。但我能找到的唯一magit diff命令(d
和D
)可以区分整个修改,而不是单个文件。
我想要git diff <filename>
的输出,但是在magit diff缓冲区中。我如何让magit只传出一个文件?
答案 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)是:
vc-diff
vc-ediff
等同于ediff 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
,因为如果允许您跳转到差异的位置。