如何在没有看到合并的情况下进行责备

问题描述 投票:0回答:3

如果我有一个历史记录如下的文件:

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

我对 E 进行了责备,然后我想看看修订版 B 和 C 中发生了什么变化,但我并不真正关心 D,因为那是合并。

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

git blame
3个回答
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 行来自哪里,这很糟糕。


0
投票

另一种方法是使用

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


0
投票

正如 sehe 和 void.pointer 建议的那样,使用:

git blame --no-merges

它记录在rev-list选项

--不合并

不要打印多个父级的提交。这和

--max-parents=1
完全一样。

© www.soinside.com 2019 - 2024. All rights reserved.