讲师中心 微信公众号
AI工具推荐 视频效率加速

Git怎么比较两个commit的差异_Git diff两个提交对比方法【技巧】

落枫大大_8036

落枫大大_8036

发布时间:2026-04-11 08:54:34

|

670人浏览过

|

来源于php中文网

原创

git diff <old-commit> <new-commit> 比较两提交差异,-表示旧版有新版删,+表示旧版无新版增;顺序错误会导致误读为回退变更;可用分支、标签、相对引用等;--name-only和--stat先看范围,--submodule=diff可深入子模块。

git怎么比较两个commit的差异_git diff两个提交对比方法【技巧】

git diff 比较两个 commit 的基本写法

直接用 git diff <commit1> <commit2> 就能看差异,但要注意顺序:左边是“旧”版本,右边是“新”版本,输出的变更块里,- 表示旧版有、新版删了,+ 表示旧版没有、新版新增了。

常见错误是把两个 commit 写反,结果看到一堆“删除文件”,其实是误把新提交当成了基线。比如想看 abc123 到 def456 的改动,却写了 git diff def456 abc123,那输出就是“从 def456 回退到 abc123 会删哪些东西”,不是你要的增量变更。

  • 推荐固定写法:git diff <old-commit> <new-commit>,像读句子一样:“从 old 到 new 有哪些变化”
  • commit 可以用完整 SHA、短 SHA(如 a1b2c3d)、分支名(main)、标签(v1.2.0),甚至相对引用(HEAD~2)
  • 如果只写一个 commit,比如 git diff abc123,默认对比的是工作区和该 commit 的差异,不是两个 commit 之间

git diff --name-only 和 --stat 看概览,别一上来就翻大 patch

两个 commit 差异可能涉及几十个文件,直接 git diff 输出容易淹没重点。先用轻量命令快速定位范围,再深入查具体文件。

典型场景:Code Review 前快速确认这次 PR 改了哪些文件;或者排查某个功能突然失效,想锁定最近一次引入变更的提交范围。

  • git diff --name-only <old> <new>:只列文件路径,不显示内容,适合复制粘贴进编辑器逐个检查
  • git diff --stat <old> <new>:显示每个文件增删行数,一眼看出哪几个文件改得最多
  • 加 --compact-summary(Git 2.38+)能合并重命名和修改,避免把重命名当成“删一个+加一个”

git diff 出现 “fatal: ambiguous argument” 错误怎么办

这个错误本质是 Git 不确定你输的字符串到底指什么:是分支名?是 tag?是某个缩写的 commit SHA?还是文件名?尤其当你用短哈希(比如 abcd)时,多个 commit 都可能匹配前缀。

Git Factory
Git Factory

为每个编码任务配置并管理独立的 Git worktree,支持并行分支和清晰的 PR 工作流,避免合并冲突。

下载

最常踩的坑是:本地没拉最新远程分支,却用 origin/main 当作比较对象,而本地根本没有这个远程跟踪分支,Git 就会报这个错。

  • 先运行 git show-ref 或 git branch -a 确认两个 commit 引用确实存在且无歧义
  • 短 SHA 至少用 7 位(git rev-parse --short=7 <commit>),降低冲突概率
  • 如果引用带斜杠(如 feature/login),确保没被当作路径——加 -- 显式分隔,例如:git diff main feature/login --

diff 结果里看不到 submodule 变更?需要额外参数

默认 git diff 对 submodule 只显示 commit hash 的变化,比如 “Subproject commit abc123 → def456”,不展开子模块内部改了啥。这在调试依赖库行为异常时很不方便。

真正要查 submodule 里具体改了哪些代码,必须显式启用递归模式。

  • 加 --submodule=log:显示子模块 commit message 摘要(默认行为)
  • 加 --submodule=diff:真正递进子模块,执行一次 git diff 并内联显示差异(需子模块已检出)
  • 注意:如果子模块未初始化(git submodule init)或未更新(git submodule update),--submodule=diff 会跳过或报错

复杂点在于,子模块的 diff 还受其自身 Git 配置影响,比如 submodule.<name>.ignore 设为 all 时,即使加了 --submodule=diff 也可能被静默忽略。这种配置容易被遗忘,导致你以为没变,其实子模块里早改了三行关键逻辑。

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1718

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2624

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6044

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

5569

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

7254

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

10474

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

5359

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

5787

2025.08.07

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 8万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn