版本對比是 Git 中非常基礎且常用的操作,就像我們寫文章時會查看修改前後的變化一樣,Git 通過 diff(差異) 工具幫我們追蹤不同版本間的代碼改動。無論是想知道某次提交改了哪些內容,還是對比兩個分支的代碼差異,學會版本對比都能讓協作和代碼管理更清晰。

爲什麼需要版本對比?

想象你在開發一個功能,中途改了很多代碼,卻不確定哪裏出錯了。這時候,通過對比“修改前”和“修改後”的版本,就能快速定位問題。常見場景包括:
- 提交代碼前,檢查暫存區的內容是否符合預期;
- 合併分支前,瞭解兩個分支的代碼差異;
- 回滾錯誤提交時,確認要撤銷的內容具體是什麼。

常用 Git 命令及操作方法

Git 中最核心的版本對比命令是 git diff,它能對比不同階段的代碼變化。下面分場景介紹具體用法:

1. 對比工作區暫存區的差異

如果你修改了文件,但還沒執行 git add(即文件處於“已修改但未暫存”狀態),可以用 git diff 查看具體改了哪裏。

操作示例
假設你有一個 main.py 文件,內容如下:

# 初始內容
print("Hello, World!")

現在你修改它爲:

# 修改後
print("Hello, Git!")
print("This is a test.")

此時執行 git diff,輸出會顯示:

- print("Hello, World!")
+ print("Hello, Git!")
+ print("This is a test.")
  • - 開頭的行是被刪除的舊內容(原 print("Hello, World!"));
  • + 開頭的行是新增的內容(新的兩行)。

2. 對比暫存區最近一次提交的差異

如果你已經執行了 git add(文件進入暫存區),想在提交前檢查暫存的內容是否正確,可以用 git diff --staged(或 --cached,兩者效果相同)。

操作示例
繼續上面的例子,執行 git add main.py 後,再執行 git diff --staged,輸出會顯示暫存區內容與最近一次提交(如果還沒提交過,默認是最近一次提交)的差異。假設是第一次提交,暫存區就是“待提交狀態”,此時 git diff --staged 會顯示和最近一次提交(即空提交)的差異:

+ print("Hello, Git!")
+ print("This is a test.")

(如果是第一次提交,這裏會顯示全部暫存的內容,因爲之前沒有提交記錄,相當於和“空版本”對比)。

3. 對比兩個歷史提交的差異

如果你想查看過去兩次提交之間的代碼變化,需要用提交 ID分支名指定兩個版本。

  • 用提交 ID 對比:先通過 git log 查看提交記錄,複製兩個提交的哈希值(前 7-8 位即可)。
    操作示例
    執行 git log,假設輸出如下(簡化版):
  commit a1b2c3d (HEAD -> main)
    第一次提交:添加打印語句
  commit e4f5g6h
    第二次提交:修改打印內容

現在想對比 e4f5g6h(第二次提交)和 a1b2c3d(第一次提交)的差異,執行:

  git diff e4f5g6h a1b2c3d

輸出會顯示這兩次提交之間的所有文件改動。

  • 用相對提交名對比:如果記不住具體哈希值,可用 HEAD(當前最新提交)、HEAD^(上一次提交,即 HEAD 的父提交)或 HEAD~n(最近 n 次提交)。
    例如:
  • git diff HEAD~1 HEAD:對比最近一次提交(HEAD)和上一次提交(HEAD~1);
  • git diff HEAD~2 HEAD~1:對比最近兩次提交和最近一次提交的差異。

4. 對比兩個分支的差異

當你需要合併分支(如 dev 合併到 main)前,想提前瞭解兩個分支的代碼差異,可用 git diff branch1 branch2

操作示例
假設你有 maindev 兩個分支,想對比它們的差異:

git diff main dev

輸出會顯示 maindev 分支在所有文件上的新增、刪除或修改內容。

5. 快速查看單個提交的完整內容

如果想快速查看某個提交具體修改了哪些文件、哪些行,可以用 git show <commit-id>

操作示例

git show a1b2c3d  # 查看哈希值爲 a1b2c3d 的提交內容

輸出會包含提交信息(如作者、時間、提交說明)和該提交修改的所有文件及具體行。

圖形化工具輔助(適合初學者)

如果覺得命令行操作複雜,也可以用圖形化工具查看版本對比:
- VS Code:打開項目後,點擊左側“源代碼管理”圖標,可直觀看到文件修改、暫存狀態,並能展開查看每行的具體差異。
- GitKraken/SourceTree:專業的 Git GUI 工具,界面更友好,支持分支可視化對比、提交歷史樹等功能。

總結

版本對比是 Git 基礎操作的核心,通過 git diff 系列命令,你可以輕鬆查看工作區、暫存區、歷史提交和分支之間的代碼變化。記住以下關鍵點:
- git diff:工作區 vs 暫存區;
- git diff --staged:暫存區 vs 最近提交;
- git diff <commit1> <commit2>:兩個歷史提交之間的差異;
- git diff branch1 branch2:兩個分支之間的差異。

多練習幾次,你就能熟練掌握版本對比的技巧,讓代碼管理更高效!

小夜