代码改动的始作俑者
在协作开发中,知道哪行代码是谁改的是很有用的。
- 对于“烂代码”,可以找到责任人
- 对于不懂或者疑惑的地方,可以找到始作俑者问问
git blame
er, 这个命令的名字…,不管如何还是很强大的,git blame 作用于文件,可以显示出每一行代码的作者,如下:
$ git blame main.cpp
^3f13d3f (chenfeiyang 2020-03-29 22:30:19 +0800 1) #include "stdio.h"
^3f13d3f (chenfeiyang 2020-03-29 22:30:19 +0800 2) int main()
^3f13d3f (chenfeiyang 2020-03-29 22:30:19 +0800 3) {
^3f13d3f (chenfeiyang 2020-03-29 22:30:19 +0800 4) printf("1\n");
7384f8b6 (chenfeiyang 2020-03-29 22:31:37 +0800 5) printf("2\n");
7384f8b6 (chenfeiyang 2020-03-29 22:31:37 +0800 6) printf("3\n");
7384f8b6 (chenfeiyang 2020-03-29 22:31:37 +0800 7) printf("4\n");
7384f8b6 (chenfeiyang 2020-03-29 22:31:37 +0800 8) printf("5\n");
f67f5c8a (chenfeiyang 2020-03-29 22:38:51 +0800 9) printf("6\n");
e48e8b5a (chenfeiyang 2020-03-29 22:39:06 +0800 10) printf("7\n");
^3f13d3f (chenfeiyang 2020-03-29 22:30:19 +0800 11) return 0;
^3f13d3f (chenfeiyang 2020-03-29 22:30:19 +0800 12) }
更加强大
git blame 还有很多参数可用,有些很有用,有些just so so吧,比如没什么用或者很少用的有:
-t 显示unix时间而不是utc时间
-l 显示commit对应的完整hash值,而不是short形式
等等。
最最有用的莫过于-L了,L可能是line的意思,比如,以下命令显示第四行到第六行代码的作者
$ git blame main.cpp -L 4,6
^3f13d3f (chenfeiyang 2020-03-29 22:30:19 +0800 4) printf("1\n");
7384f8b6 (chenfeiyang 2020-03-29 22:31:37 +0800 5) printf("2\n");
7384f8b6 (chenfeiyang 2020-03-29 22:31:37 +0800 6) printf("3\n");
-L 后边的数字分别是开始行和结束行(不要忘记逗号)
上边的命令还有另一种等效形式如下:
$ git blame main.cpp -L 4,+3
^3f13d3f (chenfeiyang 2020-03-29 22:30:19 +0800 4) printf("1\n");
7384f8b6 (chenfeiyang 2020-03-29 22:31:37 +0800 5) printf("2\n");
7384f8b6 (chenfeiyang 2020-03-29 22:31:37 +0800 6) printf("3\n");
+3 顾名思义吧,第四行开始的三行。
还可以查看某个函数,
$ git blame main.cpp -L :s
54601115 (chenfeiyang 2020-03-31 22:10:52 +0800 14) void fun()
54601115 (chenfeiyang 2020-03-31 22:10:52 +0800 15) {}