是否有可能看到谁在git blame报告的提交之前编辑了特定的行,就像一个给定行的提交历史?

例如,我运行以下(在优秀的uncrustify项目上):

$ git blame -L10,+1 src/options.cpp
^fe25b6d (Ben Gardner 2009-10-17 13:13:55 -0500 10) #include "prototypes.h"

我如何才能找到谁在提交fe25b6d之前编辑了这一行?在提交之前是谁编辑的?


当前回答

从Git 2.23开始,你可以使用Git blame——ignore-rev

对于问题中给出的例子,这将是:

git blame -L10,+1 src/options.cpp --ignore-rev fe25b6d

(然而,这是一个棘手的问题,因为fe25b6d是该文件的第一个修订!)

其他回答

如果你正在使用JetBrains Idea IDE(和衍生品),你可以选择几行,右键单击上下文菜单,然后Git ->显示历史选择。你将看到影响选定行的提交列表:

安布尔的回答是正确的,但我觉得不清楚;语法为:

git blame {commit_id} -- {path/to/file}

注意:——用于将树状sha1与相对文件路径分开。1

例如:

git blame master -- index.html

这一切都要归功于安布尔!:)

您可以使用git log -L来查看一行范围的演变。

例如:

git log -L 15,23:filename.txt

表示“跟踪文件名.txt文件中第15行到第23行的演变”。

对于这个问题,一个非常独特的解决方案是使用git log,正如Andre在这里解释的那样:

git log -p -M——follow——stat——path/to/your/file

我使用这个小bash脚本查看一个指责历史。

第一个参数:要查看的文件

后续参数:传递给git blame

#!/bin/bash
f=$1
shift
{ git log --pretty=format:%H -- "$f"; echo; } | {
  while read hash; do
    echo "--- $hash"
    git blame $@ $hash -- "$f" | sed 's/^/  /'
  done
}

你可以提供像-L 70,+10这样的责备参数,但最好使用git责备的正则表达式搜索,因为行号通常会随着时间的推移而“改变”。