版本对比是 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:两个分支之间的差异。

多练习几次,你就能熟练掌握版本对比的技巧,让代码管理更高效!

小夜