git blame查看每行代码的提交者、查看指定代码的提交者。

随声附和 提交于 2019-12-25 22:38:45

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周前

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!