11/19 本篇章節
第五篇 · 19 章
開始使用 Git
- 01 新增、初始 Repository
- 02 把檔案交給 Git 控管
- 03 工作區、暫存區與儲存庫
- 04 檢視紀錄
- 05 【狀況題】如何在 Git 裡刪除檔案或變更檔名?
- 06 【狀況題】修改 Commit 紀錄
- 07 【狀況題】追加檔案到最近一次的 Commit
- 08 【狀況題】新增目錄?
- 09 【狀況題】有些檔案我不想放在 Git 裡面...
- 10 【狀況題】檢視特定檔案的 Commit 紀錄
- 11 【狀況題】等等,這行程式誰寫的?
- 12 【狀況題】啊!不小心把檔案或目錄刪掉了…
- 13 【狀況題】剛才的 Commit 後悔了,想要拆掉重做…
- 14 【狀況題】不小心使用 hard 模式 Reset 了某個 Commit,救得回來嗎?
- 15 【冷知識】HEAD 是什麼東西?
- 16 【狀況題】可以只 Commit 一個檔案的部份的內容嗎?
- 17 【冷知識】那個長得很像亂碼 SHA-1 是怎麼算出來的?
- 18 【超冷知識】在 .git 目錄裡有什麼東西?Part 1 僅收錄於電子書
- 19 【超冷知識】在 .git 目錄裡有什麼東西?Part 2 僅收錄於電子書
第五篇 · 開始使用 Git
【狀況題】等等,這行程式誰寫的?
啊!網站怎麼掛了?!這行程式碼是誰寫的?!
這種狀況應該常常發生,想要知道某個檔案的某一行是誰寫的嗎?在 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,可在你想檢視的那個檔案上按滑鼠右鍵:

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

基本上看到的資訊跟使用指令差不多。
謎之音
很多時候,
git blame抓到的兇手大多都是自己!