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