4

如果我有一个文件的历史是这样的:

----A----B
     \    \
      C----D----E

我从 E 责备然后我想看看修订版 B 和 C 有什么变化,但我并不真正关心 D,因为那是一个合并。

有没有办法我可以做到这一点?我想我正在寻找某种 --no-merges 选项来 git blame,但我在手册中没有看到。

4

2 回答 2

3

实际上,您确实关心 D。考虑这种情况:

in commit B:
2) banana
3) coconut
4) domino     // conflicts with C

in commit C:
2) banana
3) coconut
4) elephant   // conflicts with B

在提交 D 中,我们解决了冲突:

in commit D:
2) banana
3) coconut
4) domino-elephant

请注意,在 D 中,出现了一条在 B 或 C 中都没有出现的行。如果您忽略合并,您将永远看不到这一点,并且您将永远无法分辨第 4 行的来源,这很糟糕。

于 2011-03-13T14:56:47.420 回答
0

另一种方法是使用git log -L start,end:filenamewhich 显示(默认情况下,完整的)行的历史记录,编号介于startendin之间的行filename。您还可以使用git log -L /regex/,/regexend/:filename正则表达式而不是行号来识别行。从本质上讲,在许多情况下,您可能会得到与 with 不同的结果git blame,但我能够比 with 更方便地找到“真实”(即非合并)更改git blame

于 2019-05-23T17:51:45.913 回答