1. 概述

在软件开发中,我们经常需要通过 Git 来追踪每一次提交(commit)和更新。Git 的提交范围(commit range)语法,如双点 .. 和三点 ...,是我们在查看提交历史或比较差异时非常实用的工具。

本文将重点讲解 Git 中 双点 .. 和三点 ... 提交范围的区别,并通过 git loggit diff 命令进行演示。这两个命令分别用于查看提交历史和文件差异,是 Git 日常使用中最常见的两个命令。

2. 使用 git log 查看提交历史

git log 是 Git 中用于查看提交历史的命令,默认会显示当前分支的所有提交记录,最近的提交排在最前面。我们也可以使用它来查看特定提交范围内的历史记录。

假设我们有如下提交树结构:

---A---B---C---D---E---F <== main
            \
             G---H <== feature

使用 git log --all --decorate --oneline --graph 命令可以查看整个提交历史,输出如下:

* b8434e1 (origin/feature) H
* 11dcc47 G
| * 74328c9 (HEAD -> main, origin/main, origin/HEAD) F
| * d4ac70c E
| * 6da1887 D
|/
* d0bb602 C
* 8dd752e B
* fa8c005 A

可以看到,main 分支有 F、E、D 提交,而 feature 分支有 H 和 G 提交。

2.1 双点 ..:查看一个分支独有的提交

使用 git log branch1..branch2 可以列出 在 branch2 上存在但在 branch1 上不存在 的提交。

例如:

$ git log --oneline 74328c9..b8434e1
b8434e1 (origin/feature) H
11dcc47 G

⚠️ 注意:双点语法 不包含起始提交本身,所以 master 分支的提交不会出现在输出中。

2.2 三点 ...:查看两个分支独有的提交

使用 git log branch1...branch2 可以列出 在 branch1 或 branch2 上存在,但不是两个分支共有的提交

例如:

$ git log --oneline 74328c9...b8434e1
b8434e1 (origin/feature) H
11dcc47 G
74328c9 (HEAD -> main, origin/main, origin/HEAD) F
d4ac70c E
6da1887 D

✅ 输出中包含了 feature 分支的 G、H 和 main 分支的 D、E、F,但 不包括两个分支共有的 C、B、A

3. 使用 git diff 查看差异

git diff 命令用于比较 Git 对象之间的差异,可以是提交、分支、文件等。我们也可以配合双点和三点语法来查看不同提交之间的文件变化。

3.1 双点 ..:查看两个提交之间的完整差异

使用 git diff commit1..commit2 可以查看两个提交之间的完整差异。

例如:

$ git diff --name-only 74328c9..b8434e1
d.txt
e.txt
f.txt
g.txt
h.txt

✅ 输出显示了两个分支之间所有发生变化的文件。

3.2 三点 ...:查看一个分支相对于共同祖先的差异

三点语法用于查看某个分支相对于两个分支共同祖先的更改。

例如:

$ git diff --name-only 74328c9...b8434e1
g.txt
h.txt

✅ 这里只列出了 feature 分支上新增的 g.txt 和 h.txt 文件,而没有包含 main 分支上的 d.txt、e.txt、f.txt。

⚠️ 踩坑提醒:三点语法只比较分支与共同祖先之间的差异,因此更适合用于查看 PR 中的新增修改。

4. git loggit diff 的区别总结

命令 说明
git log branch1..branch2 显示 branch2 有但 branch1 没有的提交
git log branch1...branch2 显示 branch1 或 branch2 有但不是共有的提交
git diff branch1..branch2 显示两个分支之间的完整差异
git diff branch1...branch2 显示 branch2 与两个分支的共同祖先之间的差异

📌 简单总结:

  • 双点 ..:表示“从 A 到 B 的路径上的所有提交”或“两个提交之间的完整差异”
  • 三点 ...:表示“两个分支各自独有的提交”或“某个分支与共同祖先之间的差异”

5. 小结

本文通过 git loggit diff 命令,详细讲解了 Git 中双点 .. 和三点 ... 提交范围的使用方法和区别:

  • git log branch1..branch2:查看 branch2 有但 branch1 没有的提交
  • git log branch1...branch2:查看两个分支各自独有的提交
  • git diff branch1..branch2:查看两个提交之间的完整差异
  • git diff branch1...branch2:查看某个分支与共同祖先之间的差异

📌 掌握这些符号的用法,能帮助我们更高效地分析提交历史和代码变更,尤其在处理 Pull Request、合并冲突或查看分支差异时非常实用。


原始标题:Double-Dot “..” vs. Triple-Dot “…” in Git Commit Ranges