iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
自我挑戰組

Git 與 GitHub 入門日誌系列 第 6

Day 6 : 比較檔案差異

  • 分享至 

  • xImage
  •  

今天,我們的學習目標是理解** git diff **的用途:
看「還沒提交」的變更或比對兩個提交的差異,
且能用常見的 git diff 變體檢視不同範圍的變更,
學會在提交前檢查變更內容,養成良好 commit 前檢查習慣。


為什麼要學 git diff?
在做修改、準備提交之前,常
常需要確認「我到底改了哪些地方?」,
git diff 可以精準呈現行級差異(新增、刪除、修改),
幫你決定要不要把這份修改的檔案放進暫存區、如何拆分提交,
或在 code review 前先檢查內容。

常見對比

  1. git diff:working tree vs index(unstaged changes)
  2. git diff --staged(或 --cached):index vs HEAD(即「已加入暫存區但還沒 commit 的變更」)
  3. git diff HEAD:working tree(包含已 staged 與未 staged) vs HEAD(最後一次 commit)
  4. git diff :比較兩個 commit(或兩個分支)之間差異

常見用法與範例
這次我們使用 readme.txt 做為學習範例,
我們再次修改內容:
https://ithelp.ithome.com.tw/upload/images/20250918/20169195uDFrGh3BzE.png

1. 我們可以查看工作目錄(尚未加入暫存區)的差異:

git diff

會輸出類似下圖結果:
https://ithelp.ithome.com.tw/upload/images/20250918/20169195Hf8W0YHtS6.png
這就說明使用 git diff 比較 working directory 與 index(暫存區)的差異,
也就是你還沒 git add 的變更。

  • 紅色(-):代表刪掉的東西(或舊的內容)。
  • 綠色(+):代表新增的東西。
  • 前面的 -1,2 :代表「舊版本」的檔案(也就是提交前的版本),
    意思是舊檔從第 1 行開始,有 2 行受到影響
  • 後面的 +1,3: +代表「新版本」的檔案(也就是修改後的內容),
    1,3 的意思是新檔從第 1 行開始,有 3 行受到影響

2. 把變更加入暫存區後,查看暫存區 vs HEAD(最後一次提交)的差異

先:

git add readme.txt

然後:

git diff --staged
# 或等同的舊參數:
git diff --cached

https://ithelp.ithome.com.tw/upload/images/20250918/201691951dy4ouYmVK.png
輸出會類似上面,但這次是比較 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 是在提交之前的最重要工具之一。
養成提交前檢查差異的習慣,能讓訊息更明確,也能降低合併與檢查時的錯誤。
不過還有很多項還沒應用到,等到了學過那些知識後,會再次複習。


上一篇
Day 5 : 修改檔案並再次提交
下一篇
Day 7 : 初識 Git Branch(分支)
系列文
Git 與 GitHub 入門日誌9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言