版本對比是 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。
操作示例:
假設你有 main 和 dev 兩個分支,想對比它們的差異:
git diff main dev
輸出會顯示 main 和 dev 分支在所有文件上的新增、刪除或修改內容。
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:兩個分支之間的差異。
多練習幾次,你就能熟練掌握版本對比的技巧,讓代碼管理更高效!