與該檔案相關的紀錄
之前我們介紹過 git log 指令來查看我們提交的 log 紀錄。
但我們如果是想觀察跟某個檔案有關的所有 log 提交紀錄時該怎麼辦?
那就加上該檔案的檔名作為參數,即可列出與該檔案相關的紀錄。
$ git log hello.txt
commit d321f73c6d05ab8b96c5c7f4abb75099d55b823e
Author: Logo Kuo <logo@forblind.org.tw>
Date: Sun Feb 23 22:30:28 2020 +0800
將 welcome.txt 更名為 hello.txt 並加入 test.py 檔案
當然還是可以搭配之前提的 --oneline
等參數使用。
該提交的實際行為
可是光看到這些紀錄的提交訊息,有時還是無法確定當時到底對他做了什麼事情,
像有時候程式中加了某個功能,在提交紀錄時可以看到說明,但實際到底加了什麼內容還是不清楚,
可以加上 -p
參數,先來加一筆修改紀錄:
# 在 hello.txt 檔案最後加一行字,該行內容為測試兩個字
$ echo '測試' >> hello.txt
# 列出檔案內容
$ cat hello.txt
你好
我很好
測試
# 存到暫存區並提交
$ git add .
$ git commit -m '在 hello.txt 最後加了一行字'
[master b7df611] 在 hello.txt 最後加了一行字
1 file changed, 1 insertion(+)
接著看一下詳細 log
$ git log -p hello.txt
commit b7df611332a5a7f44b667c24e40da1bcc92c00c5
Author: Logo Kuo <logo@forblind.org.tw>
Date: Fri Feb 28 21:31:22 2020 +0800
在 hello.txt 最後加了一行字
diff --git a/hello.txt b/hello.txt
index 65c6e5c..68032d3 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1,2 +1,3 @@
你好
我很好
+測試
commit d321f73c6d05ab8b96c5c7f4abb75099d55b823e
Author: Logo Kuo <logo@forblind.org.tw>
Date: Sun Feb 23 22:30:28 2020 +0800
將 welcome.txt 更名為 hello.txt 並加入 test.py 檔案
diff --git a/hello.txt b/hello.txt
new file mode 100644
index 0000000..65c6e5c
--- /dev/null
+++ b/hello.txt
@@ -0,0 +1,2 @@
+你好
+我很好
雖然格式與內容看起來有點複雜,但大致還是可以看出:
- 第一筆紀錄的檔案內容 測試 前面有個加號,就表示是該次新增的內容,減號就是刪除的內容
- 第二筆紀錄是改名,所以有
new file
的標示,內容那兩行就都算是新增出來的,應該還記得更名就是刪除再新增吧
完整內容
上面的紀錄看起來是該提交所做的事情,但我們如果是想看某個檔案的全部內容狀況呢?
例如你發現 hello.txt 的第三行是有問題的,想知道是誰在什麼時候加了這一行,就可以列出檔案完整資訊來觀察,
指令是 blame
後面加檔名:
$ git blame hello.txt
^0fdb52f welcome.txt (Logo Kuo 2020-02-16 13:01:25 +0800 1) 你好
^0fdb52f welcome.txt (Logo Kuo 2020-02-16 13:01:25 +0800 2) 我很好
b7df6113 hello.txt (Logo Kuo 2020-02-28 21:31:22 +0800 3) 測試
以上的資訊非常清楚,包括 hello.txt 還沒被改名時的紀錄都有,
資訊大致上包括:
- 提交的版本號
- 檔名
- 提交者
- 時間
- 檔案內的行號
- 該行的內容
如果檔案很大,只想看某個區間的紀錄,可以使用 -L
參數並指定行號,注意是大寫字母。
$ git blame -L 2,7 test.py
d321f73c (Logo Kuo 2020-02-23 22:30:28 +0800 2) '''這是一個銀行類別,裡
面有存款金額與存錢、提錢等功能'''
d321f73c (Logo Kuo 2020-02-23 22:30:28 +0800 3)
d321f73c (Logo Kuo 2020-02-23 22:30:28 +0800 4) class Riches:
d321f73c (Logo Kuo 2020-02-23 22:30:28 +0800 5) ''' 這是一個財富類別
d321f73c (Logo Kuo 2020-02-23 22:30:28 +0800 6) 裡面有兩個屬性,分別是 m
oney 現金與 mybank 銀行存款
d321f73c (Logo Kuo 2020-02-23 22:30:28 +0800 7) '''
以上顯示的是該檔案 test.py 第 2 到 7 行的紀錄。
有時一個專案很久沒碰了,想要繼續更新或新增功能時,可以利用上面這些指令幫你回憶一下上次做了什麼。
當然系統被改壞了用來抓兇手也是很普遍的用法。
所以在使用 log 時可以針對某些條件來調出紀錄,也可以針對某個檔案讀取紀錄,
對於該 log 做了什麼事也能看到,這樣讓我們可以更靈活的利用 git 管理檔案。
補充
以上這些輸出的資訊會比較多,在超過一頁資訊時 git bash 的提示符號會變成 :
此時表示進入了瀏覽狀態,常用指令如下:
- 空白鍵:下一頁
- p 上一頁
- q 離開瀏覽狀態回到
$
而看到提示符號 (END)
就表示看完囉。
如果覺得這樣瀏覽還是不方便,或者有編輯的需求,那就在原本的指令後面加上 > 檔名
把資訊導入某個檔案再使用瀏覽器開啟該檔案進行瀏覽或編輯。
$ git blame test.py > look.txt
還記得之前使用 echo 來把內容加到檔案中吧,就是利用這個原理。
再次提醒,一個大於會把後面的檔案內容清空,然後再新增資訊進去,而兩個大於是把資訊添加在該檔案後面,
而這兩種方式當沒有指定的檔案時都會自行建立一個並添加內容。