git log 美化與過濾技巧 文章首圖

git log 美化與過濾技巧

Git Log 美化與過濾技巧:讓版本歷史清晰可見

在 Linux 開發環境中,git log 無疑是最常用的指令之一。然而,預設的輸出格式往往冗長且難以快速掌握專案的關鍵變更。對於日常需要追蹤程式碼演進、尋找特定 Bug 來源或進行 Code Review 的開發者而言,掌握 git log 的高階用法與美化技巧,能大幅提升工作效率。本文将深入解析如何利用格式化輸出、過濾條件以及圖形化呈現,讓你的 Git 日誌變得既美觀又實用。

客製化輸出格式

預設的 git log 會顯示 Commit Hash、作者、日期以及訊息,但資訊排列緊湊,閱讀時容易眼花。使用 --pretty 或簡寫 -p 選項,我們可以自定義輸出欄位。最實用的技巧是結合 --oneline 與自定義格式,將關鍵資訊濃縮在一行內。

例如,若你只關心「誰、在什麼時間、做了什麼修改」,可以使用以下指令:

git log --oneline --pretty=format:"%h - %an, %ar : %s"

這裡的格式字串解釋如下:

  • %h:短版 Commit Hash
  • %an:作者名稱 (Author Name)
  • %ar:相對時間 (Relative Date,例如 2 days ago)
  • %s:提交訊息 (Subject)

執行後,輸出結果將類似如下:

a1b2c3d - john, 2 days ago : Fix login bug
e5f6g7h - jane, 1 week ago : Add user profile feature
i8j9k0l - john, 2 weeks ago : Initial commit

這種格式不僅簡潔,還方便使用 grep 進行後續過濾。

圖形化歷史與分支追蹤

當專案分支眾多時,理解分支的合併與分叉情況至關重要。--graph 選項能將提交歷史以 ASCII 圖形的方式呈現,直觀地展示分支的流動。通常建議搭配 --all 查看所有分支,並使用 --decorate 顯示分支標籤。

git log --all --graph --oneline --decorate

輸出範例:

*   3f4e5d6 (HEAD -> main, origin/main) Merge branch 'feature-x'
|\
| * 7a8b9c0 (feature-x) Update config file
* | 1d2e3f4 Add new API endpoint
|/
* 5g6h7i8 Initial setup

從圖形中可以清楚看到 feature-x 分支如何與 main 合併,這對於理解複雜的 Git 歷史結構極有幫助。

精準過濾提交記錄

除了美化,過濾條件是 git log 的核心威力所在。開發者常需要找出特定時間範圍、特定檔案或特定作者的變更。

1. 依時間過濾 使用 --since--until 可以限定時間範圍。例如,查看最近一週內的提交:

git log --since="1 week ago" --oneline

2. 依檔案過濾 若想追蹤某個特定檔案的歷史,可以使用 -- 分隔提交條件與檔案路徑:

git log --oneline -- src/utils/helper.py

3. 依關鍵字過濾 使用 --grep 搜尋提交訊息中包含特定單字的記錄:

git log --oneline --grep="fix" --grep="bug" --all-match

註:--all-match 表示訊息需同時包含 "fix" 與 "bug";若省略此選項,則只要包含任一即可。

常見問題與解決

Q1: 為什麼 git log --oneline 輸出的 Hash 太長? 預設 --oneline 會顯示完整的 40 位元組 Hash,這在長列表中非常佔空間。請務必搭配 --abbrev-commit 或簡寫 --no-abbrev 的相反用法,實際上 --oneline 預設就是短 Hash。若仍覺得不夠短,可手動指定 --pretty=format:"%h ..."%h 預設會自動縮短至足夠區分的長度(通常為 7-8 位元)。

Q2: 如何查看某個提交與前一個提交的具體差異? git log 本身只顯示摘要。若需查看具體程式碼差異,應使用 git show 搭配 Commit Hash,或在 git log 中使用 -p 選項。但 -p 會使輸出變得極為冗長。建議做法是:先透過美化後的 git log 找到目標 Hash,再執行:

git show <commit_hash> --stat

--stat 選項會顯示檔案變更統計(新增/刪除行數),比完整 diff 更適合快速檢視影響範圍。

小結

掌握 git log 的美化與過濾技巧,能讓版本控制不再是黑盒子。透過自定義格式、圖形化歷史以及精準的過濾條件,開發者能更快速地定位問題、理解專案演進。建議在 .gitconfig 中設定別名(alias),例如將上述複雜指令設為 git llog,即可在日常工作中一鍵呼叫,享受高效開發的樂趣。