Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/prolog/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs 如何使用magit区分单个文件?_Emacs_Git Diff_Magit - Fatal编程技术网

Emacs 如何使用magit区分单个文件?

Emacs 如何使用magit区分单个文件?,emacs,git-diff,magit,Emacs,Git Diff,Magit,假设我在git repo中对未耦合的文件做了许多不相关的更改。我想分别检查和提交每个文件 我运行magit status,并获得已更改文件的列表。但是我能找到的唯一的magit diff命令(d和d)可以区分整个版本,而不是单个文件 我想要git diff的输出,但是在magit diff缓冲区中。如何让magit只区分一个文件 Magit使您能够直接从Magit状态缓冲区“单独查看和提交每个文件”,而不需要任何单独的差异缓冲区 您只需展开感兴趣的文件(使用TAB键,它显示文件在某一点上的差异)

假设我在git repo中对未耦合的文件做了许多不相关的更改。我想分别检查和提交每个文件

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

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

Magit使您能够直接从
Magit状态
缓冲区“单独查看和提交每个文件”,而不需要任何单独的差异缓冲区

您只需展开感兴趣的文件(使用TAB键,它显示文件在某一点上的差异);然后,您可以将要提交的部分(整个文件,或单个大块,甚至是标记的区域)用s暂存(或u取消暂存)。对该提交中涉及的所有更改重复此操作,一旦所有必要的内容都已转移,请按c开始提交

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


如果确实希望在单独的缓冲区中查看文件的差异,可以通过直接调用
magit diff buffer file
或使用
magit file弹出窗口中的“diff”选项(d)从文件的缓冲区进行查看。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的评论如下:


您可能还对默认绑定到e的
magit ediff
感兴趣,并在此时为diff/文件打开一个ediff会话


默认情况下,Emacs中提供的其他一些备选方案(即非Magit)包括:

  • C-xv=调用
    vc diff
  • M-x
    vc ediff
    用于ediff等效物
  • M-x
    ediff修订版
    创建具有更多选项的ediff会话
我将
vc ediff
绑定到C-xvC-=以使这两个变体具有相似的键绑定。

我建议观看magit的创建者编写的。 这是20分钟,它向您显示了预期的工作流程

还有一个小提示:你可以用1-2-3来改变 当前标题的差异详细程度

另一个小贴士:如果你对这些帅哥的身材不满意, 您可以通过-没错-标记 区域和压力s。这是魔法。 我有一段时间不知道这个选项,实际上我
回到控制台,以老式的方式执行git add-p

在使用工具时不违反规则肯定有好处,其他答案就是明证

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

magit提供了一个菜单界面,可通过
M-x magit文件弹出窗口
对当前文件执行操作。从这里你需要按的键是“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的位置。

我不知道选项卡。对,我想可能是这样。这几乎就是你错过的magit的“杀手级应用”方面,好了您可以对整个文件、文件中的单个大块,甚至标记的区域进行分级或取消分级。你应该浏览一下,因为你可能还错过了其他一些好的功能。我刚刚用了一张备忘单。我不知道“section visibility”命令是什么意思,我只是认为
s
在我的magit版本中不起作用。您可能还对默认绑定到
e
magit ediff
感兴趣,Peter Becich:毫无疑问,在ediff调用的任何一方,您都可以使用代码来记住和恢复窗口配置,但就我个人而言,这类事情只能依靠
赢家模式。一两次快速的C-C总是让事情回到原来的样子,这对任何事情都有效。令人遗憾的是,magit的最后一次放映是在4年前。作为一个社区,Emacs需要更多地接受屏幕广播。在Ediff dwimming中使用e on
magit status
怎么样?
vc diff
还可以让您跳转到diff的位置(这可能是一个新功能)。我希望我能在未来几十次提高投票率“有时候,你只是想告诉编辑该做什么,让互联网上的人回答你的问题,而不是告诉你想做其他事情。”