git 寻找代码改动的“始作俑者”

代码改动的始作俑者

在协作开发中,知道哪行代码是谁改的是很有用的。

  1. 对于“烂代码”,可以找到责任人
  2. 对于不懂或者疑惑的地方,可以找到始作俑者问问

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) {}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章