Magit:如何在同一分支上对比两个不同提交之间的同一文件?

17
如何使用 magit 获取同一文件的两个提交之间的差异?
直接从 git 中可以执行此操作。但我不知道如何在 magit 中执行此操作。从 magit-status 中,似乎 d D 返回整个存储库的差异。这对我来说非常棘手,因为存储库很大,导致 magit (以及 emacs )变得无响应。是否有一种方法可以要求 magit 仅将搜索限制为存储库中的一个文件?
我还尝试在 magit-status 缓冲区中执行:diff $start_commit..$end_commit -- path/to/file 。这有效,但输出是一个简单的缓冲区,没有任何突出显示或折叠选项...

可能是重复的问题:在MAGIT中比较两个不同分支中的foo.bar(鉴于分支只是git中命名的提交,这些问题是相同的)。 - phils
4个回答

12
如果有人现在遇到这个问题,现在可以在magit中完成此操作(我是从magit-log中完成的,但您也可以从其他地方完成):
  1. d 打开 magit-diff-popup
  2. =f 指定要查看的文件(输入相对于项目根目录的路径)
  3. r 进行差异范围。您将被要求输入提交范围,例如,4abcde2..HEAD。或者,如果您在magit-log中突出显示了提交范围,则范围将自动设置,无需提示。
这样,您就可以进入一个带有高亮和代码折叠的 magit-diff 缓冲区。

如果启用了 magit-file-mode(可能是通过 global-magit-file-mode),则可以使用 C-c M-g D r。如果这太麻烦,您可以将 magit-file-popup 绑定到比 C-c M-g 更容易键入的内容。 - phils
M-x magit-diff-popup 也可以带你到那里。 - Matt Ellen

5

有一种方法是使用vc,正如这个相关答案所建议的那样,特别是C-u C-x v =。然而,这只返回一个缓冲区,没有展开或折叠代码块的可能性。


3

在 @cdidyk 的回答基础上,现在也可以使用文本选择来选择差异范围,以比输入提交哈希值更快。

因此,一个更快(且更可视化)的操作序列如下:

  1. 使用文本选择 C-SPC(如果使用 evil-mode 则是 V)来选择提交
  2. =f 来指定文件(相对于项目根目录的路径)
  3. d 打开差异弹出窗口
  4. d 打开 dwim 缓冲区或使用 r 来进行差异范围比较(在这种情况下,它们大致具有相同的功能,我认为)

2

您也可以执行M-xmagit-ediff-compare

然后输入旧提交的SHA和要与HEAD比较的文件的文件名,这些都在同一分支上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接