今天,我們的學習目標是理解** git diff **的用途:
看「還沒提交」的變更或比對兩個提交的差異,
且能用常見的 git diff 變體檢視不同範圍的變更,
學會在提交前檢查變更內容,養成良好 commit 前檢查習慣。
為什麼要學 git diff?
在做修改、準備提交之前,常
常需要確認「我到底改了哪些地方?」,
git diff 可以精準呈現行級差異(新增、刪除、修改),
幫你決定要不要把這份修改的檔案放進暫存區、如何拆分提交,
或在 code review 前先檢查內容。
常見對比
常見用法與範例
這次我們使用 readme.txt 做為學習範例,
我們再次修改內容:
1. 我們可以查看工作目錄(尚未加入暫存區)的差異:
git diff
會輸出類似下圖結果:
這就說明使用 git diff 比較 working directory 與 index(暫存區)的差異,
也就是你還沒 git add 的變更。
2. 把變更加入暫存區後,查看暫存區 vs HEAD(最後一次提交)的差異
先:
git add readme.txt
然後:
git diff --staged
# 或等同的舊參數:
git diff --cached
輸出會類似上面,但這次是比較 index(暫存區)與 HEAD(最後一次 commit)的差異
,常用來在 commit 前最後檢查要提交的內容。
3. 查看工作目錄與 HEAD(包含 staged 與 unstaged)之間的全部差異
git diff HEAD
這會顯示工作目錄(現在檔案的狀態)相較於最新提交(HEAD 指向的版本)的全部變化(不論是否已 staged),方便一次看到「我離最後 commit 差多少」。
以下為補充用法,之後學到的時候會再用到!
4. 比較兩個 commit(或分支)之間的差異
先用 git log --oneline 找到 commit hash,然後:
git diff <commitA> <commitB>
或比較兩個分支:
git diff main feature-branch
如果只想要檔名列表:
git diff --name-only <commitA> <commitB>
5. 只看檔名或更精簡的顯示
--name-only:只列出有變動的檔名
--stat:顯示檔案變動摘要(新增/刪除行數)
git diff --stat
6. 文字級/單字級差異(更易讀)
--word-diff 或 --color-words(視終端支援)能在單字級別顯示差異,適合小改動時閱讀:
git diff --word-diff
小技巧(實務常用)
在提交前用 git diff --staged 再檢查一次,避免把不該提交的暫存內容一起送出。
想只提交部分修改時,試試 git add -p(交互式分片暫存,stage hunk)。
如果想還原尚未 staged 的變更:git restore (或舊方式 git checkout -- )。
如果差異太多、想快速看哪些檔案改了:先用 git status 或 git diff --name-only。
今日小結
git diff 是在提交之前的最重要工具之一。
養成提交前檢查差異的習慣,能讓訊息更明確,也能降低合併與檢查時的錯誤。
不過還有很多項還沒應用到,等到了學過那些知識後,會再次複習。