我們在基礎的章節中提過一些查看commit 後的檔案內容,或者某個檔案的歷史修改紀錄。
這次我們利用實例來了解 commit 的內容,並不只是看 commit 訊息而已。
在什麼情況下我們會想看某個 commit 的完整內容或把兩個 commit 做比較:
- 你是專案管理人,需要對每個成員的程式進行了解
- 系統有問題了但不知道是哪個 commit 改壞了
- 因為光看 commit 訊息還是不清楚,想知道某個 commit 到底做了什麼事
昨天因為新伙伴第一次寫內部系統,所以我想從頭到尾看一下他寫的 code 是不是有問題,
因此使用了這個功能。
在 git 中有很多指令的功能是一樣或類似的,查紀錄也是一樣。
例如 git log -p commit
等於 git show commit
他們都是利用類似 diff 的工具列出詳細內容。
讓我們來了解一下:
$ git show
# 沒有輸入 commit 表示查看最後一個提交的詳細資訊
# 如果覺得資訊很多,不好對照,可以把結果輸出到檔案,再用編輯器開檔來閱讀
# git show > 路徑檔名
commit d1158da7b42346978dc261e0012b7f33b11880c8
Author: Logo Kuo <logo@forblind.org.tw>
Date: Sat Sep 5 21:06:57 2020 +0800
修正批次匯入時找到捐贈者後使用了相同的變數名稱 result 錯誤
# 以上是原本 git log 所看到的資訊
# 如果這段程式不是你寫的,相信光看這個 commit 訊息完全不知道是改了什麼檔案的什麼地方
diff --git a/xxx/models/donorsAdminModel.php b/xxx/models/donorsAdminModel.php
# 上面是修改的檔名與路徑
# a 跟 b 不是路徑,而是表示 a 與 b 相比
# 也就是說, a 是這個 commit 之前的內容, b 是這次 commit 所修改的部分
index 148f1af..7de6b6b 100644
# 我只知道 100644 是檔案權限,如果熟 linux 應該看得懂,
# 擁有者可讀寫,群組可讀與其他使用群組可讀
# 其他可以請高手補充
--- a/sys/models/donorsAdminModel.php
+++ b/sys/models/donorsAdminModel.php
@@ -973,8 +973,8 @@ class donorsAdminModel extends forblind_DB {
# 973 是行號,但是系統會列出修改開始的前三行與修改結束的後三行
# 所以實際我們修改的是 976 行
# 當然你也可以直接使用關鍵字來搜尋到該處
# class 開頭的是這個檔案的第一行有效行,也就是他會自動略過註解
$sql .= $tail;
$donorObj = $this->db->query($sql);
if( $donorObj->num_rows > 0 ){
# 上面這三行檔案內容前面沒有符號的,就表示這是給你參考位置用的,實際上沒有被修改\
- $result = $donorObj->fetch_assoc();
- $id = $result['donors_ID'];
# 上面這兩行前面有減號,表示這些被刪了,其實可能是被修改而已,不是真的全部刪掉重打的
# 反正對 diff 來說,有改過的行就是 - 然後直接給你一行修改過的新行前面標上 +
+ $ret = $donorObj->fetch_assoc();
+ $id = $ret['donors_ID'];
# 從這裡可以看出,我們把變數 $result 改成 $ret 了
# 再看一下原本 commit 的訊息應該就懂了
$donor['donors_ID'] = $donation['donors_ID'] = $id;
// 有找到就需要更新捐贈人資料
// 設定自然人或法人 join 的表
# 後面檔案內容的這三行一樣是給我們定位用的,實際上沒有被修改
# 接下來看一下統計
$ git log -1 -stat
commit d1158da7b42346978dc261e0012b7f33b11880c8 (HEAD -> master, origin/master,
origin/HEAD)
Author: Logo Kuo <logo@forblind.org.tw>
Date: Sat Sep 5 21:06:57 2020 +0800
修正批次匯入時找到捐贈者後使用了相同的變數名稱 result 錯誤
# 前面都一樣
xxx/models/donorsAdminModel.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
# 這是這個 commit 的統計數據,實際上就是我們在推 commit 寫完訊息後會產生的那部分
# 我們可以看出是哪一個路徑及檔案被更動了
# 它告訴我們有 4 行被加加減減
# 這個 commit 有1個檔案被更動,2行被新增與2行被刪除
我認為一定要會看這些資訊,不然我們就沒辦法得知到底這個提交實際是做了什麼事,
例如我可能做了四件事,但在 commit 訊息只寫了個大概,甚至順手改了什麼也沒寫出來
像昨天,我就從 log 發現有一行被誤刪了
從 commit 詳細紀錄還可以看到這個伙伴的撰寫軌跡與思考的過程
其實滿有趣的,下一篇我們要來看看複雜一點的 commit 紀錄。