← 上一章:【狀況題】檢視特定檔案的 Commit 紀錄 下一章:【狀況題】啊!不小心把檔案或目錄刪掉了… →


【狀況題】等等,這行程式誰寫的?

啊!網站怎麼掛了?!這行程式碼是誰寫的?!

這種狀況應該常常發生,想要知道某個檔案的某一行是誰寫的嗎?在 Git 可使用 git blame 指令幫你抓出兇手:

$ git blame index.html
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800  1) <!DOCTYPE html>
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800  2) <html>
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800  3)   <head>
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800  4)     <meta charset="utf-8">
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800  5)     <title>首頁</title>
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800  6)   </head>
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800  7)   <body>
7dc9302e (Eddie Kao 2019-05-28 16:00:49 +0800  8)     <div class="container">
7dc9302e (Eddie Kao 2019-05-28 16:00:49 +0800  9)     </div>
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800 10)   </body>
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800 11) </html>

這樣可以很清楚的看得出來哪一行是誰在什麼時候寫的,而最前面看起來像亂碼的文字,正是每次 Commit 的識別代碼。表示這一行是在哪一次的 Commit 裡。以這個例子來說,除了第 8 跟第 9 行之外(7dc9302e),其它的都是在同一個 Commit 裡加進來的(6783cc21)。

如果檔案太大,也可加上 -L 參數,只顯示指定行數的內容:

$ git blame -L 5,10 index.html
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800  5)     <title>首頁</title>
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800  6)   </head>
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800  7)   <body>
7dc9302e (Eddie Kao 2019-05-28 16:00:49 +0800  8)     <div class="container">
7dc9302e (Eddie Kao 2019-05-28 16:00:49 +0800  9)     </div>
6783cc21 (Eddie Kao 2019-05-28 16:00:35 +0800 10)   </body>

這樣就只會顯示第 5 ~ 10 行的資訊。

如果使用 SourceTree,可在你想檢視的那個檔案上按滑鼠右鍵:

image

選擇「Annotate Selected」,就可以看到這個畫面:

image

基本上看到的資訊跟使用指令差不多。

謎之音

很多時候,git blame 抓到的兇手大多都是自己!


← 上一章:【狀況題】檢視特定檔案的 Commit 紀錄 下一章:【狀況題】啊!不小心把檔案或目錄刪掉了… →

Comments