[教學] git應用-commit 比一比(1) - 討論區

[教學] git應用-commit 比一比(1)

文章瀏覽次數 1114 文章回覆數 0

特種兵

特種兵圖像(預設)

2020-09-06 14:52:18

From:211.23.21.202

我們在基礎的章節中提過一些查看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 紀錄。