iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
Modern Web

Git 起來!每日一招學起來系列 第 22

Day 22:git status & git log 進階 —— 專案考古學家的放大鏡

  • 分享至 

  • xImage
  •  

在日常開發中,我們最常輸入的兩個指令之一,就是

  • git status(現在專案長什麼樣)
  • git log(過去發生過什麼事)

前幾天我們已經學會這兩個指令的基本用法,今天要進一步挖掘:

👉 如何用這兩個指令「快速找出問題、還原真相」,變身專案的數位考古學家。


git status 進階用法:掌握現場狀況

它是開發者的「即時儀表板」。

但除了顯示「有哪些修改沒 commit」,其實還能更細緻地呈現狀態。

精簡模式:git status -s

想看重點不看長篇說明?

使用 -s(或 --short):

git status -s

範例輸出:

 M index.html
A  main.js
?? newfile.txt
符號 意義
M 修改(Modified)
A 新增到暫存區(Added)
?? 未追蹤(Untracked)

這種格式在日常開發中超方便,特別是你不想被滿滿的英文敘述淹沒時。


追蹤變更來源:git status -v

  • v(或 -verbose) 會顯示實際變更的內容(diff),

可直接看到每個修改的細節:

git status -v

輸出示意:

diff --git a/app.js b/app.js
index 1a2b3c4..5d6e7f8 100644
--- a/app.js
+++ b/app.js
@@ -10,6 +10,7 @@ function init() {
   console.log("Start app");
+  console.log("New log added!");
 }

當你準備 commit 前,這是最後一次確認「到底改了什麼」的最佳時機。


git log 進階用法:穿越歷史的時光機

如果說 git status 是「現場觀察」,

git log 就是「時光旅行」。

它讓你查看整個專案的歷史記錄,追蹤每一次修改背後的故事。


美化輸出:git log --oneline --graph --decorate

這是工程師界的經典組合技:

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

輸出範例:

* e8a1d0f (HEAD -> main, origin/main) Fix typo in README
* 5a9d3b7 Add API handler
* 7b4a1c2 Merge branch 'feature/login'
|\
| * 12adf9a Add login form
| * 56b1e0a Update login validation
* | 2a3e5f6 Refactor user model
|/
* 0c1b2d3 Initial commit

這個畫面是不是超像「地鐵圖」?

每個分支的合併、歷史脈絡一目了然


查特定作者紀錄:git log --author="Sean"

git log --author="Sean" --oneline

可以篩出由特定開發者提交的歷史。

想知道「某人到底改了哪些東西」時非常實用(尤其是 Code Review 前)。


查特定檔案的歷史:git log <filename>

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

這能幫你追出「這個檔案是什麼時候被誰改壞的」。

(別笑,這句話每個工程師都講過。)


查某段程式的歷史:git log -L

如果你只想看某個函式的變化,可以用 -L 參數。

git log -L :loginHandler:src/auth.js

它會顯示 loginHandler 函式從出生到現在的完整演化史。

對 Debug 非常有幫助!


顯示提交的差異摘要:git log -p

git log -p -2

這會顯示最近兩次提交的實際變更內容(類似 diff)。

非常適合做「版本追蹤」或「問題回溯」。


自訂輸出格式:git log --pretty=format

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

輸出範例:

a1b2c3d - Sean, 2 days ago : Fix API timeout
f4e5d6a - Mei, 3 days ago : Add user validation
代碼 意義
%h 短版 commit ID
%an 作者名稱
%ar 相對時間(如 3 days ago)
%s 提交訊息

這個格式超適合產出「變更紀錄摘要」或整合到自動化工具中。


搭配 grep:關鍵字搜尋神器

想在所有 commit 訊息裡找特定關鍵字?

git log --grep="bug"

想在所有變更內容中搜尋關鍵字?

git log -S "initApp"

這會找出「新增或刪除包含 initApp 的行」的提交紀錄。

非常適合尋找「某段程式是誰加的、何時被刪」。


小技巧整理

目標 指令
簡短顯示變更狀態 git status -s
顯示變更內容 git status -v
美化 log git log --oneline --graph --decorate --all
查特定人提交 git log --author="name"
查特定檔案 git log <file>
查特定函式演變 git log -L :func:file
搜尋關鍵字 git log --grep="word"
搜尋程式內容 git log -S "code"

小挑戰 💪

  1. 修改兩個檔案,但只 git add 其中一個,使用 git status -s 觀察差異。
  2. git log --oneline --graph --decorate --all 觀察分支歷史,試著找出最近一次合併的 commit。
  3. 嘗試用 git log --author="你的名字" 篩選出你自己提交的歷史。
  4. 使用 git log -L :函式名稱:檔案名稱 查看某個函式的演化歷史。
  5. git log -S "程式碼片段" 找出特定程式碼是誰、何時加入或刪除的。

小結

我們學會了如何:

  • git status 檢查「現在」
  • git log 回顧「過去」
  • 並用進階參數快速鎖定問題、還原歷史

git status 是你的現在進度表,git log 是你的時光機。
掌握這兩者,你就能隨時在專案時空中自由穿梭。


上一篇
Day 21:git revert —— 撤回修改的安全後悔藥
下一篇
Day 23:merge 進階 + conflict 解法 —— 分支匯流高手指南
系列文
Git 起來!每日一招學起來23
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言