VSCode里有个叫Git Blame的插件,当你的光标放在某行代码上时,左下角会显示该行代码是由谁贡献的和贡献时间。
当然这个功能Git本身也是包含的,如果你要查看文件的每个部分是谁修改的,直接在Git bash里输入:git blame [filename]
会显示整个文件的每一行的详细修改信息:包括SHA-1串、日期和作者。
例如下边内容:
[Live@Live-PC][ /fortunes/data ] (master)
$ git blame song100 # 输入的命令在这里哦
15108174 (Duke 2016-11-14 20:59:20 +0800 1) 题目:《塞上》
15108174 (Duke 2016-11-14 20:59:20 +0800 2) 作者:柳开(946-999)
15108174 (Duke 2016-11-14 20:59:20 +0800 3) 鸣[骨交]直上一千尺,天静无风声更干。
15108174 (Duke 2016-11-14 20:59:20 +0800 4) 碧眼胡儿三百骑,尽提金勒向云看。
15108174 (Duke 2016-11-14 20:59:20 +0800 5) %
15108174 (Duke 2016-11-14 20:59:20 +0800 6) 题目:《寒食》
15108174 (Duke 2016-11-14 20:59:20 +0800 7) 作者:王禹偁(954-1001)
15108174 (Duke 2016-11-14 20:59:20 +0800 8) 今年寒食在商山,山里风光亦可怜:
15108174 (Duke 2016-11-14 20:59:20 +0800 9) 稚子就花拈蛱蝶,人家依树系秋千。
15108174 (Duke 2016-11-14 20:59:20 +0800 10) 郊原晓绿初经雨,巷陌春阴乍禁烟。
15108174 (Duke 2016-11-14 20:59:20 +0800 11) 副使官闲莫惆怅,酒钱犹有撰碑钱。
15108174 (Duke 2016-11-14 20:59:20 +0800 12) %
################################### 以下省略 ###################################
1、具体参数
git blame [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental]
[-L <range>] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>]
[--progress] [--abbrev=<n>] [<rev> | --contents <file> | --reverse <rev>..<rev>]
[--] <file>
2、实用参数
-L <start>,<end> | 范围。<start>为开始位置,<end>为结束位置,可以是数字也可以是正则表达式。可以组合显示。 |
-b | 对边界提交显示空白的SHA-1(连续的SHA-1中间显示空白)。 |
-l | 显示长SHA-1。 |
--show-stats | 输出末尾包括其他统计信息。 |
-p | 以专为机器使用而设计的格式显示。 |
--score-debug | 包括与文件之间的行移动有关的调试信息和文件内的行移动。 |
-e, --show-email | 显示邮箱地址。 |
-w | 比较父版本和子版本时,请忽略空格以查找行的来源。 |
例一、查看指定行
查看第 6 行到第 11 行,如下:
[Live@Live-PC][ /fortunes/data ] (master)
$ git blame -L 6,11 song100 # 输入的命令在这里哦
15108174 (Duke 2016-11-14 20:59:20 +0800 6) 题目:《寒食》
15108174 (Duke 2016-11-14 20:59:20 +0800 7) 作者:王禹偁(954-1001)
15108174 (Duke 2016-11-14 20:59:20 +0800 8) 今年寒食在商山,山里风光亦可怜:
15108174 (Duke 2016-11-14 20:59:20 +0800 9) 稚子就花拈蛱蝶,人家依树系秋千。
15108174 (Duke 2016-11-14 20:59:20 +0800 10) 郊原晓绿初经雨,巷陌春阴乍禁烟。
15108174 (Duke 2016-11-14 20:59:20 +0800 11) 副使官闲莫惆怅,酒钱犹有撰碑钱。
例二、从指定行开始显示多少行
+:为往下。
- :为往上。
从第6行开始显示5行(总共显示5行):
[Live@Live-PC][ /fortunes/data ] (master)
$ git blame -L 6,+5 song100 # 输入的命令在这里哦
15108174 (Duke 2016-11-14 20:59:20 +0800 6) 题目:《寒食》
15108174 (Duke 2016-11-14 20:59:20 +0800 7) 作者:王禹偁(954-1001)
15108174 (Duke 2016-11-14 20:59:20 +0800 8) 今年寒食在商山,山里风光亦可怜:
15108174 (Duke 2016-11-14 20:59:20 +0800 9) 稚子就花拈蛱蝶,人家依树系秋千。
15108174 (Duke 2016-11-14 20:59:20 +0800 10) 郊原晓绿初经雨,巷陌春阴乍禁烟。
例三、正则表达式
从“int main”开头的行到“return 0;”结尾的行:
[Live@Live-PC /Hello ] (master)
$ git blame -L '/^int main/','/return 0;$/' Hello.cpp # 输入的命令在这里哦
59575828 (Duke 2019-12-25 18:49:55 +0800 3) int main(void)
^3dedd1c (Duke 2019-12-25 18:46:54 +0800 4) {
59575828 (Duke 2019-12-25 18:49:55 +0800 5) printf("Hello World!\n");
^3dedd1c (Duke 2019-12-25 18:46:54 +0800 6) return 0;
提示:我这用Git Bash(git version 2.24.1.windows.2)没法正常显示,而使用Cygwin(git version 2.21.0)可正常显示。
例四、组合
[Live@Live-PC /Hello ] (master)
$ git blame -L '/^int main/,+5' Hello.cpp # 输入的命令在这里哦
59575828 (Duke 2019-12-25 18:49:55 +0800 3) int main(void)
^3dedd1c (Duke 2019-12-25 18:46:54 +0800 4) {
59575828 (Duke 2019-12-25 18:49:55 +0800 5) printf("Hello World!\n");
^3dedd1c (Duke 2019-12-25 18:46:54 +0800 6) return 0;
^3dedd1c (Duke 2019-12-25 18:46:54 +0800 7) }
例五、其它方式
git blame v2.6.18.. -- history.cpp # 按Tag查看
git blame --since=3.weeks -- history.cpp # 查看3周前
来源:CSDN
作者:duke56
链接:https://blog.csdn.net/duke56/article/details/103691743