如何对比同一文件在两个提交之间的差异

对比同一文件在不同提交间的差异:git diff <提交1> <提交2> -- <文件路径>。可用标签、HEAD~n 相对引用代替哈希;加 --word-diff 看行内差异,--stat 只看摘要。

最佳实践
Git 提交历史与版本恢复示意

命令格式:git diff <提交A> <提交B> -- <文件路径>。 两个提交可以是哈希、标签、分支名或 HEAD~3 这类相对引用。只关心这一个文件时末尾的路径(-- 后面)不能省,否则会输出两个提交间的全部差异。

基本用法

git log --oneline -- src/app.js        # 先看这个文件的提交历史,拿到哈希

git diff a1b2c3d e4f5g6h -- src/app.js

# 等价写法:两点语法(比较两个端点)
git diff a1b2c3d..e4f5g6h -- src/app.js

# 相对引用:当前版本 vs 3 个提交前
git diff HEAD~3 HEAD -- src/app.js

实用变体

git diff a1b2c3d e4f5g6h --stat -- src/app.js    # 只看改了多少行
git diff --word-diff a1b2c3d e4f5g6h -- src/app.js  # 行内差异高亮
git difftool a1b2c3d e4f5g6h -- src/app.js       # 调起图形化 diff 工具

顺便对比某文件与当前工作区

git diff a1b2c3d -- src/app.js      # 旧提交 vs 当前工作区

查看某提交里这个文件改成什么样

git show a1b2c3d -- src/app.js      # 该提交对这个文件的具体改动

常见问题(FAQ)

Q:两个参数顺序有讲究吗?

有。git diff A B 展示的是"从 A 到 B 的变化":减号是 A 有而 B 没有的,加号是 B 新增的。顺序反了,加减也反过来。

Q:文件中途改过名,diff 还跟得上吗?

git diff 对重命名的检测有限。可追溯历史用 git log --follow -- 新路径 找全链条,再对相应提交做 diff。

Q:三点 A...B 和两点有什么区别?

A...B(三点)比较的是" merge-base(共同祖先)与 B"的差异——看分支引入了什么改动时常用;两点是直接对比两个端点。查单文件历史一般用两点。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台