Git Log
📝 TL;DR:
git log是「時光相簿」,紀錄所有 commit 歷史(或說是犯罪紀錄?)。常用選項:--oneline(一行簡潔版)、--graph(畫出家譜圖)、--follow(追蹤改名檔案)。查看特定檔案用git log -- <file>、查看「誰寫的這行爛 code」用git blame、查看「某次 commit 改了什麼」用git show。考古必備神器!
開場情境:追查神秘 Bug 的起源
情境: 週一早上,PM 說「登入頁面的 Logo 怎麼消失了?」你檢查程式碼,發現 <img src="logo.png"> 變成了 <img src="">。
你想知道:
- 是誰改的?
- 什麼時候改的?
- 為什麼要這樣改?
這時 git log 就是你的時光機!
# 1. 查看這個檔案的修改歷史
git log --oneline -- src/components/Header.vue輸出:
a1b2c3d fix: 修復 RWD 問題
e4f5g6h feat: 新增深色模式
i7j8k9l refactor: 重構 Header 組件 ← 可疑!# 2. 查看「重構 Header」這個 commit 的詳細內容
git show i7j8k9l輸出:
- <img :src="logoUrl" alt="Logo">
+ <img :src="" alt="Logo"> ← 找到兇手了!# 3. 查看是誰 commit 的
git show -s --format="%an <%ae>" i7j8k9l輸出:
實習生小明 <ming@example.com>🎯 真相大白! 小明在重構時不小心把 logoUrl 刪掉了。
💡 這個情境展示了:
git log -- <file>找出「哪些 commits 改了這個檔案」git show <hash>查看「這個 commit 到底改了什麼」git show -s --format查看「是誰 commit 的」
前置知識
- 了解 Git commit 概念
- 知道基本 Git 指令(add、commit)
- 參考:Git Commit
基本用法
1. 標準輸出
git log輸出範例:
commit 1234abc5678def (HEAD -> main, origin/main)
Author: Lucas Hsu <lucas@example.com>
Date: Tue Dec 25 14:30:00 2023 +0800
feat: 新增使用者登入功能
- 實作 JWT 認證
- 新增登入表單驗證
- 單元測試覆蓋率 85%
commit 9876fed5432cba
Author: Mary Chen <mary@example.com>
Date: Mon Dec 24 10:15:22 2023 +0800
fix: 修復購物車計算錯誤生活化比喻:就像「畢業紀念冊」,記錄著每個人(commit)的大頭照、自我介紹和幹過的事!
2. 簡潔模式(最常用)
git log --oneline輸出範例:
1234abc (HEAD -> main) feat: 新增使用者登入功能
9876fed fix: 修復購物車計算錯誤
5555aaa docs: 更新 README
3333bbb refactor: 重構資料庫連線邏輯一行顯示:前 7 碼 hash + 訊息標題
重點:99% 的情況用 --oneline 就夠了,清爽又快速!
3. 圖形化顯示分支
git log --oneline --graph --all輸出範例:
* 1234abc (HEAD -> main) feat: 新增登入功能
| * 5678def (feature/cart) feat: 購物車功能
|/
* 9876fed fix: 修復計算錯誤
* 5555aaa docs: 更新文件比喻:就像「家譜圖」,可以看出誰是主線、誰是分支、哪裡合併了!
限制輸出範圍
1. 顯示最近 N 筆
# 最近 3 筆
git log -3
# 或
git log -n 3
# 最近 10 筆,簡潔模式
git log --oneline -102. 時間範圍
# 最近 2 週
git log --since="2 weeks ago"
# 特定日期後
git log --since="2023-12-01"
# 特定日期區間
git log --since="2023-12-01" --until="2023-12-25"
# 最近 3 天
git log --since="3 days ago"使用時機:月底要寫「工作日誌」時超好用,一行指令就能生成這個月的所有 commits!
3. 作者篩選
# 特定作者
git log --author="Lucas"
# 多個作者(正則表達式)
git log --author="Lucas\|Mary"
# 排除特定作者
git log --author="^(?!.*bot).*$"小技巧:用這個找出「某個實習生到底 commit 了什麼東西」超方便(誤)!
4. 訊息關鍵字
# 包含特定關鍵字
git log --grep="fix"
# 多個關鍵字(OR)
git log --grep="fix\|feat"
# 多個關鍵字(AND)
git log --grep="fix" --grep="login" --all-match查詢特定檔案歷史
方法一:基本檔案歷史
# 查看特定檔案的所有 commit
git log -- path/to/file.txt
# 簡潔模式
git log --oneline -- src/App.vue方法二:追蹤重命名/移動(重要!)
# 使用 --follow 追蹤檔案改名
git log --follow -- path/to/file.txt為什麼需要 --follow?
git log -- new-name.js:只顯示重命名後的 commitsgit log --follow -- new-name.js:顯示完整歷史(含改名前)
重點:檔案改名不代表歷史消失!用 --follow 就能「穿越時空」追蹤完整身世!
方法三:查看變更內容
# 顯示每個 commit 的 diff
git log -p -- path/to/file.txt
# 簡化 diff(只顯示變更統計)
git log --stat -- src/utils.js輸出範例:
commit 1234abc
Author: Lucas Hsu
Date: Tue Dec 25 14:30:00 2023
feat: 新增工具函式
src/utils.js | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)方法四:單字層級差異
# 顯示單字差異(適合文件)
git log -p --word-diff -- README.md進階功能
1. git show - 查看特定 Commit 內容
# 查看特定 commit 的完整資訊
git show 1234abc
# 只查看某個 commit 中特定檔案的內容
git show 1234abc:path/to/file.txt
# 查看上一個 commit
git show HEAD~1比喻:就像「翻開某一頁日記」,看看那天寫了什麼!
2. git blame - 查看每行作者(追兇神器)
# 顯示檔案每行的作者、日期、commit
git blame path/to/file.txt輸出範例:
1234abc5 (Lucas Hsu 2023-12-25 14:30:00 +0800 1) function calculateTotal() {
9876fed4 (Mary Chen 2023-12-24 10:15:22 +0800 2) return items.reduce((sum, item) =>
1234abc5 (Lucas Hsu 2023-12-25 14:30:00 +0800 3) sum + item.price, 0
9876fed4 (Mary Chen 2023-12-24 10:15:22 +0800 4) );
1234abc5 (Lucas Hsu 2023-12-25 14:30:00 +0800 5) }進階選項:
# 顯示特定行範圍
git blame -L 10,20 file.txt
# 忽略空白變更
git blame -w file.txt
# 顯示 email
git blame -e file.txt警告:git blame 直譯是「追究責任」,但請別真的拿來「抓戰犯」XD 用來追蹤程式碼來源才是正途!
3. 格式化輸出
# 自訂格式(hash + 作者 + 訊息)
git log --pretty=format:"%h - %an: %s"
# 輸出:
# 1234abc - Lucas Hsu: feat: 新增登入功能
# 9876fed - Mary Chen: fix: 修復計算錯誤
# 常用格式變數:
# %h - 簡短 hash
# %H - 完整 hash
# %an - 作者名稱
# %ae - 作者 email
# %ad - 作者日期
# %s - commit 訊息標題
# %b - commit 訊息內容實用範例:產生 Changelog
git log --pretty=format:"- %s (%an, %ad)" --date=short --since="1 month ago"輸出:
- feat: 新增登入功能 (Lucas Hsu, 2023-12-25)
- fix: 修復計算錯誤 (Mary Chen, 2023-12-24)
- docs: 更新文件 (John Doe, 2023-12-20)超實用:自動產生「本月工作成果」或「專案更新日誌」,老闆看了都說讚!
4. 統計資訊
# 顯示變更統計
git log --stat
# 簡短統計
git log --shortstat
# 每個作者的 commit 數量
git shortlog -sn實用指令組合
組合 1:美化的分支圖
git log --oneline --graph --all --decorate --abbrev-commit可設定為別名:
git config --global alias.lg "log --oneline --graph --all --decorate"
# 使用:git lg小技巧:把常用的長指令設成別名,打字省時又省力!
更多實用別名:
# 最近 10 筆 commits 的精美圖
git config --global alias.l10 "log --oneline --graph --decorate -10"
# 查看今天的 commits
git config --global alias.today "log --since='00:00:00' --all --oneline"
# 查看我的 commits
git config --global alias.my "log --author='你的名字' --oneline"組合 2:查看昨天的 commits
git log --since="yesterday" --oneline更多時間範圍:
# 今天
git log --since="00:00:00" --oneline
# 這週
git log --since="last monday" --oneline
# 最近 7 天
git log --since="7 days ago" --oneline
# 12 月的 commits
git log --since="2023-12-01" --until="2023-12-31" --oneline組合 3:找出誰刪除了某行程式碼
# 先用 blame 找出行號,假設是第 15 行被刪除
git log -p -S"function oldFunction()" -- file.js-S 搜尋新增/刪除特定文字的 commits。
使用時機:當你發現「某個函式不見了」,用這招找出「誰刪的、為什麼刪」!
實戰範例:
# 情境:找出「誰刪了 calculateTotal 函式」
git log -p -S"function calculateTotal" -- src/utils.js
# 輸出會顯示所有「新增或刪除這段文字」的 commits
# 找到紅色 - 的那個 commit,就是刪除它的兇手!組合 4:製作「本週工作報告」(超實用!)
情境: 週五下班前,主管要你寫「本週做了什麼」。
#!/bin/bash
echo "# 本週工作報告"
echo "> $(date -d 'last monday' +%Y-%m-%d) ~ $(date +%Y-%m-%d)"
echo ""
# 你的 commits
git log --author="$(git config user.name)" \
--since="last monday" \
--pretty=format:"- %ad:%s" \
--date=short
echo ""
echo ""
echo "## 統計"
# Commit 數量
commits=$(git log --author="$(git config user.name)" --since="last monday" --oneline | wc -l)
echo "- 總 Commits:$commits"
# 變更行數
git log --author="$(git config user.name)" \
--since="last monday" \
--shortstat | grep "files changed" | \
awk '{files+=$1; inserted+=$4; deleted+=$6} END {print "- 變更檔案:"files"\\n- 新增行數:"inserted"\\n- 刪除行數:"deleted}'輸出範例:
# 本週工作報告
> 2026-01-06 ~ 2026-01-10
- 2026-01-10:feat: 新增使用者登入功能
- 2026-01-09:fix: 修復購物車計算錯誤
- 2026-01-08:docs: 更新 API 文件
- 2026-01-07:refactor: 重構資料庫連線
- 2026-01-06:test: 新增單元測試
## 統計
- 總 Commits:5
- 變更檔案:23
- 新增行數:456
- 刪除行數:123超實用:每週五下班前跑一次,自動產生給主管看!
組合 5:查看「某個功能」的完整開發歷史
情境: 你想回顧「登入功能」是怎麼一步步做出來的。
# 搜尋 commit 訊息包含「login」或「登入」
git log --grep="login\|登入" --oneline
# 加上變更內容
git log --grep="login\|登入" -p
# 只看統計
git log --grep="login\|登入" --stat組合 6:找出「大改動」的 commits
情境: 專案突然變慢,你懷疑有人做了大規模重構。
# 找出變更超過 100 行的 commits
git log --all --oneline --shortstat | \
awk '/^[a-f0-9]+ / {commit=$0} /files changed/ {if ($4+$6 > 100) print commit}'
# 或用腳本
git log --all --oneline --numstat | \
awk 'NF==3 {plus+=$1; minus+=$2} NF==1 {if (plus+minus>100) print; plus=0; minus=0}'組合 7:產生「Changelog」(發布前必做!)
情境: 要發 v2.0.0,需要產生「這個版本的更新內容」。
#!/bin/bash
# 從上一個 tag 到現在的所有 commits
last_tag=$(git describe --tags --abbrev=0)
echo "# Changelog"
echo ""
echo "## [$last_tag...HEAD]"
echo ""
# 依類型分組
echo "### ✨ 新功能"
git log $last_tag..HEAD --grep="^feat" --pretty=format:"- %s (%h)" --no-merges
echo ""
echo "### 🐛 Bug 修復"
git log $last_tag..HEAD --grep="^fix" --pretty=format:"- %s (%h)" --no-merges
echo ""
echo "### 📝 文件"
git log $last_tag..HEAD --grep="^docs" --pretty=format:"- %s (%h)" --no-merges
echo ""
echo "### ♻️ 重構"
git log $last_tag..HEAD --grep="^refactor" --pretty=format:"- %s (%h)" --no-merges
echo ""
# 貢獻者
echo "### 👥 貢獻者"
git log $last_tag..HEAD --format='%aN' | sort -u輸出範例:
# Changelog
## [v1.5.0...HEAD]
### ✨ 新功能
- feat: 新增使用者登入功能 (a1b2c3d)
- feat: 新增深色模式 (e4f5g6h)
### 🐛 Bug 修復
- fix: 修復購物車計算錯誤 (i7j8k9l)
- fix: 修正 RWD 問題 (m1n2o3p)
### 📝 文件
- docs: 更新 API 文件 (q4r5s6t)
### 👥 貢獻者
Lucas Hsu
Mary Chen
John Doe組合 8:追蹤「效能問題」的引入時間
情境: 網站突然變慢,你想知道是哪個 commit 造成的。
# 找出修改關鍵檔案的 commits
git log --oneline -- src/api/*.js
# 或搜尋「效能相關」的 commits
git log --grep="perf\|slow\|optimize" --oneline
# 查看這些 commits 的詳細內容
git log --grep="perf" -p進階:用 git bisect 自動化(二分搜尋)
# 1. 開始 bisect
git bisect start
# 2. 標記「現在很慢」(bad)
git bisect bad
# 3. 標記「一週前還很快」(good)
git bisect good HEAD~50
# 4. Git 會自動切換到中間的 commit,測試效能
# 如果慢:git bisect bad
# 如果快:git bisect good
# 5. 重複直到找到「第一個變慢的 commit」
# 6. 結束
git bisect reset實戰練習
練習 1(簡單)
查看最近 5 筆 commits 的簡潔歷史,並顯示分支圖。
參考答案
git log --oneline --graph -5
# 或包含所有分支
git log --oneline --graph --all -5
# 設定別名方便使用
git config --global alias.l5 "log --oneline --graph -5"
# 之後用:git l5驗證:
# 應該看到類似這樣的輸出:
# * a1b2c3d (HEAD -> main) feat: 最新功能
# * e4f5g6h fix: 修復 bug
# * i7j8k9l docs: 更新文件
# * m1n2o3p refactor: 重構
# * q4r5s6t test: 新增測試練習 2(簡單)
找出特定檔案 README.md 最近一個月的所有修改記錄,包含作者和日期。
參考答案
# 方法一:標準格式
git log --since="1 month ago" -- README.md
# 方法二:自訂格式
git log --pretty=format:"%h - %an (%ad): %s" --date=short --since="1 month ago" -- README.md
# 方法三:顯示差異
git log -p --since="1 month ago" -- README.md
# 驗證:顯示 commit 數量
git log --oneline --since="1 month ago" -- README.md | wc -l實戰技巧:
# 只看標題(第一行)
git log --since="1 month ago" --format="%s" -- README.md
# 依作者分組
git log --since="1 month ago" --format="%an" -- README.md | sort | uniq -c練習 3(中等)
寫一個 Shell 腳本,產生「本週 Changelog」,格式為:日期 | 作者 | 訊息。
參考答案與思路
#!/bin/bash
echo "📋 本週 Changelog($(date -d 'last monday' +%Y-%m-%d) ~ $(date +%Y-%m-%d))"
echo "========================================"
echo ""
# 取得本週的 commits
git log --pretty=format:"%ad | %an | %s" --date=short --since="last monday" --until="now"
echo ""
echo ""
echo "📊 統計資訊:"
# 統計本週 commit 數量
commit_count=$(git log --oneline --since="last monday" | wc -l)
echo "總 Commits: $commit_count"
# 統計各類型 commit
echo ""
echo "類型分布:"
git log --pretty=format:"%s" --since="last monday" | grep -oE "^(feat|fix|docs|style|refactor|test|chore)" | sort | uniq -c
echo ""
echo "👥 作者貢獻:"
git shortlog -sn --since="last monday"輸出範例:
📋 本週 Changelog(2026-01-06 ~ 2026-01-10)
========================================
2026-01-10 | Lucas Hsu | feat: 新增登入功能
2026-01-09 | Mary Chen | fix: 修復計算錯誤
2026-01-08 | John Doe | docs: 更新 API 文件
2026-01-07 | Lucas Hsu | refactor: 重構資料庫連線
2026-01-06 | Mary Chen | test: 新增單元測試
📊 統計資訊:
總 Commits: 5
類型分布:
1 docs
1 feat
1 fix
1 refactor
1 test
👥 作者貢獻:
2 Lucas Hsu
2 Mary Chen
1 John Doe思路:
- 用
--since="last monday"取得本週 commits - 用
--pretty=format自訂輸出格式 - 用
grep提取 commit 類型前綴 - 用
shortlog -sn統計作者貢獻
超實用:每週五下班前跑一次,自動產生「本週工作成果」給主管看!
進階:輸出為 Markdown
#!/bin/bash
output_file="CHANGELOG_WEEK_$(date +%Y%m%d).md"
cat > "$output_file" << EOF
# Weekly Changelog
> Generated on $(date +"%Y-%m-%d %H:%M:%S")
## Commits
| Date | Author | Message |
| ---- | ------ | ------- |
EOF
git log --pretty=format:"| %ad | %an | %s |" --date=short --since="last monday" >> "$output_file"
echo ""
echo "✅ Changelog 已儲存至:$output_file"
# 自動開啟檔案
code "$output_file" # 用 VS Code 開啟練習 4(進階):製作「貢獻者排行榜」
寫一個腳本,分析整個專案的貢獻者,包含:
- Commits 數量排行
- 程式碼行數貢獻
- 最活躍的時間段
- 最常修改的檔案
參考答案與思路
#!/bin/bash
echo "# 🏆 專案貢獻者排行榜"
echo "> 產生時間:$(date '+%Y-%m-%d %H:%M:%S')"
echo ""
# 1. Commits 數量排行
echo "## 📊 Commits 數量排行"
echo ""
echo "| 排名 | 貢獻者 | Commits | 百分比 |"
echo "|------|--------|---------|--------|"
total_commits=$(git log --all --format="%H" | wc -l)
rank=1
git shortlog -sn --all | head -10 | while read count author; do
percentage=$(echo "scale=1; $count * 100 / $total_commits" | bc)
echo "| $rank | $author | $count | ${percentage}% |"
((rank++))
done
echo ""
# 2. 程式碼行數貢獻
echo "## 📈 程式碼行數貢獻(最近 100 commits)"
echo ""
echo "| 貢獻者 | 新增行數 | 刪除行數 | 淨增長 |"
echo "|--------|----------|----------|--------|"
git log --all --format='%aN' --numstat -100 | \
awk '
NF==1 {author=$0; next}
NF==3 {
added[author]+=$1
deleted[author]+=$2
}
END {
for (a in added) {
printf "| %s | %d | %d | %d |\n", a, added[a], deleted[a], added[a]-deleted[a]
}
}
' | sort -t'|' -k5 -nr | head -10
echo ""
# 3. 最活躍的時間段
echo "## ⏰ 最活躍的時間段"
echo ""
echo "### 每月 Commits"
echo ""
git log --all --format="%ad" --date=format:"%Y-%m" | sort | uniq -c | tail -12 | \
awk '{printf "- %s: %d commits\n", $2, $1}'
echo ""
echo "### 每週的哪一天最活躍"
echo ""
git log --all --format="%ad" --date=format:"%u - %A" | sort | uniq -c | sort -nr | \
awk '{printf "- %s: %d commits\n", $2" "$3, $1}'
echo ""
echo "### 每天的哪個時段最活躍"
echo ""
git log --all --format="%ad" --date=format:"%H" | sort | uniq -c | \
awk '{
hour=$2
count=$1
if (hour >= 0 && hour < 6) period="深夜 (00-06)"
else if (hour >= 6 && hour < 12) period="早上 (06-12)"
else if (hour >= 12 && hour < 18) period="下午 (12-18)"
else period="晚上 (18-24)"
commits[period]+=$1
}
END {
for (p in commits) print "- "p": "commits[p]" commits"
}
' | sort -t: -k2 -nr
echo ""
# 4. 最常修改的檔案(熱點檔案)
echo "## 🔥 最常修改的檔案(熱點檔案)"
echo ""
echo "| 排名 | 檔案 | 修改次數 |"
echo "|------|------|----------|"
rank=1
git log --all --format= --name-only | \
grep -v '^$' | sort | uniq -c | sort -rn | head -20 | \
while read count file; do
echo "| $rank | \`$file\` | $count |"
((rank++))
done
echo ""
# 5. 最大的 commits(可能需要拆分)
echo "## ⚠️ 最大的 Commits(建議拆分)"
echo ""
echo "| Hash | 作者 | 日期 | 變更行數 | 訊息 |"
echo "|------|------|------|----------|------|"
git log --all --format="%H|%an|%ad|%s" --date=short --shortstat | \
awk '
/^\|/ {
split($0, a, "|")
hash=a[1]
author=a[2]
date=a[3]
msg=a[4]
}
/files changed/ {
changes=$4+$6
if (changes > 200) {
printf "| %s | %s | %s | %d | %s |\n",
substr(hash,1,7), author, date, changes, msg
}
}
' | head -10
echo ""
echo "---"
echo ""
echo "**產生此報告的指令:**"
echo '```bash'
echo "$0"
echo '```'輸出範例:
# 🏆 專案貢獻者排行榜
> 產生時間:2026-01-07 15:30:00
## 📊 Commits 數量排行
| 排名 | 貢獻者 | Commits | 百分比 |
| ---- | --------- | ------- | ------ |
| 1 | Lucas Hsu | 145 | 42.5% |
| 2 | Mary Chen | 98 | 28.7% |
| 3 | John Doe | 67 | 19.6% |
## ⏰ 最活躍的時間段
### 每週的哪一天最活躍
- 3 - Wednesday: 87 commits
- 2 - Tuesday: 76 commits
- 4 - Thursday: 65 commits
### 每天的哪個時段最活躍
- 下午 (12-18): 123 commits
- 早上 (06-12): 98 commits
- 晚上 (18-24): 87 commits
- 深夜 (00-06): 23 commits
## 🔥 最常修改的檔案(熱點檔案)
| 排名 | 檔案 | 修改次數 |
| ---- | -------------- | -------- |
| 1 | `src/App.vue` | 47 |
| 2 | `package.json` | 32 |
| 3 | `README.md` | 28 |思路:
- 用
git shortlog -sn統計 commits 數量 - 用
git log --numstat取得行數統計 - 用
--date=format格式化日期,統計時間分布 - 用
git log --name-only找出最常修改的檔案 - 用
--shortstat找出「大改動」的 commits
使用範例:
chmod +x contributors_report.sh
./contributors_report.sh > CONTRIBUTORS.md
# 查看報告
cat CONTRIBUTORS.md
# 或用 VS Code 開啟
code CONTRIBUTORS.md進階:產生圖表
# 安裝 gnuplot
# 產生 commits 趨勢圖
git log --all --format="%ad" --date=short | sort | uniq -c | \
awk '{print $2,$1}' > commits_trend.dat
gnuplot << EOF
set terminal png size 800,400
set output 'commits_trend.png'
set xlabel 'Date'
set ylabel 'Commits'
set title 'Commits Trend'
set xdata time
set timefmt "%Y-%m-%d"
set format x "%m/%d"
plot 'commits_trend.dat' using 1:2 with lines title 'Commits'
EOF
echo "✅ 圖表已產生:commits_trend.png"FAQ
Q: git log 輸出太多怎麼辦?
方法一:限制數量
git log -10 # 只顯示 10 筆方法二:分頁查看
git log | less
# 按 Space 下一頁,q 離開方法三:簡潔模式
git log --onelineQ: 如何找出刪除特定檔案的 commit?
# 找出刪除 old-file.txt 的 commit
git log --diff-filter=D --summary | grep old-file.txt使用時機:當你發現「某個檔案不見了」,用這招找出「誰刪的、什麼時候刪的」!
Q: git blame 顯示的都是同一個人?
可能是大規模重構或格式化(如 Prettier)。使用 --ignore-rev 忽略特定 commit:
# 建立 .git-blame-ignore-revs 檔案
echo "1234abc5678def" > .git-blame-ignore-revs
# 設定 Git 使用此檔案
git config blame.ignoreRevsFile .git-blame-ignore-revs
# 執行 blame
git blame file.txtQ: 如何搜尋程式碼歷史(類似 grep)?
# 搜尋新增/刪除特定文字的 commits
git log -S"function calculateTotal()" --source --all
# 搜尋變更符合正則的 commits
git log -G"function.*calculate.*" --source --all延伸閱讀
- Git Commit - 提交變更指南
- Git Diff - 比較變更差異
- Pro Git: 檢視提交的歷史記錄
- Git Pretty Formats
總結
git log顯示 commit 歷史,--oneline最常用(簡潔清爽)。--follow追蹤檔案重命名,查詢完整歷史(考古必備)。git blame查看每行作者,適合追蹤程式碼來源(但別拿來抓戰犯)。git show查看特定 commit 內容(翻開某一頁日記)。- 善用格式化輸出(
--pretty=format)產生 Changelog(自動化工作日誌)。
最後一句話:git log 就是專案的「時光相簿」,記錄著每個 commit 的故事。熟練使用它,就能像福爾摩斯一樣追蹤程式碼的前世今生,找出每個 bug 的「犯罪現場」!