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

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

 

發佈了46 篇原創文章 · 獲贊 20 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章