1. 概述

在日常开发和团队协作中,经常需要对比 Git 中两个分支之间的差异。本文将介绍几种使用 git diff 命令来比较分支的方法,帮助你快速定位代码变更。

git diff 是 Git 提供的一个非常强大的命令,可以比较文件、提交、分支等对象之间的差异。掌握其用法,能有效提升我们对代码历史变化的掌控能力。

2. 使用一条命令对比两个分支

我们可以直接使用 git diff 命令来比较两个分支的差异:

$ git diff branch1 branch2
diff --git a/file1.txt b/file1.txt
index 3b18e51..c28f4fa 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1 @@
-hello world
+hello from branch2

上面的输出说明:

  • diff --git a/file1.txt b/file1.txt 表示这个文件在两个分支之间发生了变化。
  • a/b/ 分别代表两个分支中的同一文件。
  • index 行展示了两个分支中该文件的 blob 对象哈希值。
  • + 表示新增内容,- 表示删除内容。

通过这个输出,我们可以清楚地看到 file1.txt 中的 hello world 被替换成了 hello from branch2

小贴士:如果你只是想快速查看两个分支之间的代码变更,这个命令非常实用。

3. 只显示差异文件的名称

有时候我们并不关心具体的代码变更,只关心哪些文件被修改了。

这时可以使用 --name-only 参数:

$ git diff branch1 branch2 --name-only
file1.txt

输出只包含发生变更的文件名,简洁明了。

踩坑提醒:这个参数只显示文件名,不会显示具体修改内容。如果你需要更详细的信息,不要遗漏。

4. 在当前分支下对比另一个分支

除了直接指定两个分支外,我们也可以先切换到一个分支,然后对比另一个分支:

$ git checkout branch2
$ git diff branch1

这样也能看到和前面一样的差异输出。

优点:这种方式更符合某些人的操作习惯,尤其是当你已经在当前分支上工作时,不需要输入两个分支名。

5. 对比两个分支的共同祖先

有时候我们想对比两个分支从共同祖先分叉之后的变化,而不是它们当前的状态。

比如以下分支结构:

---A---B---C---D  <== branch1
        \
         E---F    <== branch2

我们想比较的是 branch2(提交 F)和 branch1 的提交 B(即共同祖先)之间的差异。

这时可以使用三连点语法:

$ git diff branch1...branch2

⚠️ 注意:这是 git diff branch1..branch2 的简写形式,但两者语义不同。三连点表示“从共同祖先开始比较”,而两个点表示“从指定分支开始比较”。

6. 对比两个特定提交之间的差异

除了分支,我们还可以直接比较两个提交(commit)之间的差异:

$ git diff b94a88bac17318fb3c3cc881d657c04de9fd7901 73ea8956375c10fe41c669ba8c6f6f9e01490452

输出格式与前面类似,只是这次比较的是两个具体的提交快照。

适用场景:当你需要对比某个 feature 分支在合并前后的具体变化时,这个命令非常有用。

7. 总结

通过本文,我们学习了以下几种使用 git diff 比较分支差异的方法:

  • 使用 git diff branch1 branch2 直接比较两个分支
  • 使用 --name-only 只显示变更的文件名
  • 切换到一个分支后,使用 git diff other-branch 进行比较
  • 使用 git diff branch1...branch2 比较共同祖先之后的差异
  • 使用 commit hash 比较两个提交之间的差异

熟练掌握这些命令,能帮助你在日常开发中快速定位问题、理解代码演进过程。Git 是一个功能强大的工具,合理使用 git diff 能显著提升我们的开发效率。


原始标题:Find the Differences Between Two Git Branches