1. 概述
在软件开发中,我们经常需要通过 Git 来追踪每一次提交(commit)和更新。Git 的提交范围(commit range)语法,如双点 ..
和三点 ...
,是我们在查看提交历史或比较差异时非常实用的工具。
本文将重点讲解 Git 中 双点 ..
和三点 ...
提交范围的区别,并通过 git log
和 git 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 log
与 git 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 log
和 git diff
命令,详细讲解了 Git 中双点 ..
和三点 ...
提交范围的使用方法和区别:
- ✅
git log branch1..branch2
:查看 branch2 有但 branch1 没有的提交 - ✅
git log branch1...branch2
:查看两个分支各自独有的提交 - ✅
git diff branch1..branch2
:查看两个提交之间的完整差异 - ✅
git diff branch1...branch2
:查看某个分支与共同祖先之间的差异
📌 掌握这些符号的用法,能帮助我们更高效地分析提交历史和代码变更,尤其在处理 Pull Request、合并冲突或查看分支差异时非常实用。