git log - 查看 Commit 歷史
git log 讓你查看 repository 的 commit 歷史紀錄。
基本用法
git log
輸出範例:
commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0
Author: Mike Lee <mike@example.com>
Date: Mon Jan 8 10:00:00 2025 +0800
feat: add user authentication
commit b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1
Author: Mike Lee <mike@example.com>
Date: Sun Jan 7 15:30:00 2025 +0800
fix: resolve login bug
按 q 離開。
常用選項
單行顯示
git log --oneline
輸出:
a1b2c3d feat: add user authentication
b2c3d4e fix: resolve login bug
c3d4e5f docs: update README
顯示分支圖
git log --graph
搭配 --oneline 更清楚:
git log --oneline --graph
輸出:
* a1b2c3d Merge branch 'feature'
|\
| * b2c3d4e Add new feature
| * c3d4e5f Start feature development
|/
* d4e5f6g Previous commit
顯示所有分支
git log --all
結合其他選項:
git log --oneline --graph --all
限制顯示數量
# 只顯示最近 5 筆
git log -5
# 或
git log -n 5
顯示變更的檔案
# 顯示修改的檔案名稱
git log --name-only
# 顯示修改的檔案和狀態
git log --name-status
# 顯示統計資訊
git log --stat
--stat 輸出範例:
commit a1b2c3d
Author: Mike Lee <mike@example.com>
Date: Mon Jan 8 10:00:00 2025 +0800
feat: add login form
src/components/LoginForm.js | 45 ++++++++++++++++++++++++++++
src/styles/login.css | 20 +++++++++++++
2 files changed, 65 insertions(+)
顯示每次 Commit 的差異
git log -p
這會顯示每個 commit 的詳細 diff。
搜尋與篩選
依作者篩選
git log --author="Mike"
依訊息搜尋
git log --grep="login"
搜尋 commit message 包含 "login" 的紀錄。
依日期篩選
# 某日期之後
git log --after="2025-01-01"
git log --since="2025-01-01"
# 某日期之前
git log --before="2025-01-31"
git log --until="2025-01-31"
# 日期區間
git log --after="2025-01-01" --before="2025-01-31"
# 相對日期
git log --since="2 weeks ago"
git log --since="yesterday"
依檔案篩選
# 查看特定檔案的歷史
git log index.html
# 查看特定目錄的歷史
git log src/
# 只看該檔案的修改(更精確)
git log --follow index.html
--follow 會追蹤檔案重新命名的歷史。
搜尋程式碼變更
# 搜尋新增或刪除特定字串的 commit
git log -S "function login"
# 搜尋符合正規表達式的變更
git log -G "login.*password"
自訂輸出格式
預設格式
git log --pretty=full
git log --pretty=fuller
git log --pretty=short
自訂格式
git log --pretty=format:"%h - %an, %ar : %s"
輸出:
a1b2c3d - Mike Lee, 2 hours ago : feat: add login
b2c3d4e - Mike Lee, 5 hours ago : fix: resolve bug
常用的格式佔位符:
| 佔位符 | 說明 |
|---|---|
%H | 完整 commit hash |
%h | 簡短 commit hash |
%an | 作者名稱 |
%ae | 作者 email |
%ar | 作者日期(相對) |
%ad | 作者日期 |
%cn | Committer 名稱 |
%s | Commit 訊息 |
%b | Commit 訊息內文 |
常用組合
漂亮的 log 顯示
git log --oneline --graph --all --decorate
可以設成別名:
git config --global alias.lg "log --oneline --graph --all --decorate"
# 之後只要打
git lg
查看特定範圍
# 從某個 commit 到最新
git log a1b2c3d..HEAD
# 兩個分支之間的差異
git log main..feature
# 查看 feature 有但 main 沒有的 commit
git log main..feature
查看合併的 commit
# 只顯示合併 commit
git log --merges
# 不顯示合併 commit
git log --no-merges
其他查看歷史的指令
git show
查看特定 commit 的詳細資訊:
git show a1b2c3d
git shortlog
統計每個人的 commit 數量:
git shortlog
# 依數量排序
git shortlog -sn
輸出:
25 Mike Lee
18 Jane Doe
7 Bob Smith
git reflog
查看 HEAD 的移動歷史(包含 reset、checkout 等操作):
git reflog
reflog 在你不小心 reset 或刪除分支時,可以幫你找回遺失的 commit。
實用範例
查看最近一週的工作
git log --oneline --since="1 week ago" --author="Mike"
查看某個檔案何時被刪除
git log --all --full-history -- path/to/deleted/file.txt
查看某行程式碼的歷史
git log -L 10,20:index.js
查看 index.js 第 10-20 行的修改歷史。