git diff 的一个妙用

git diff 常规用法

git diff 可以用来比较在git仓库中的两次提交或两个文件的diff,常见用法如下:

sql 复制代码
# 显示当前代码与最新commit的代码之间的差别
git diff

# 显示暂存(也就是已经git add 但还没有git commit)的代码提交
git diff --staged

# 显示当前代码与<commit-id>时代码的区别
git diff <commit-id> 

# 显示暂存代码与<commit-id>时代码的区别
git diff --staged <commit-id> 

# 显示两次commit-id之间的代码区别
git diff <commit-id1> <commit-id2>  

# 显示当前分支与 branch1 分支上的代码区别
git diff <branch1>

# 显示两个分支上的代码之间的区别
git diff <branch1> <branch2>

所有上述命令后面都可以加一个目录或文件路径来只显示这个目录或文件中的区别:

bash 复制代码
git diff /path/to/folder

git diff /path/to/file.py

# 也可用git的参数终止符号--,避免文件名和参数重名时将文件名解析为参数
git diff --  /path/to/file.py

git diff 妙用

git diff 有一个选项--no-index ,可以用来不在git仓库中的两个文件或目录。
--no-index的git帮助文档中说明如下:

css 复制代码
git diff [<options>] --no-index [--] <path> <path>
This form is to compare the given two paths on the filesystem. You can omit the --no-index option when running the command in a working tree controlled by Git and at least one of the paths points outside the working tree, or when running the command outside a working tree controlled by Git. This form implies --exit-code.

说明它可以用来比较两个给定的路径。

那为什么要用git diff 来比较非git仓库里面的两个路径呢,直接用Linux和Mac上自带的diff 命令不好吗?

git diff 相比diff 的优势是它能生成以+- 开头的diff结果,红色表示删去,绿色表示添加,因此能很直观地看出增加和删除了哪些地方,而diff给出来的是黑色的代码差别,展示很不直观。

另外git diff的结果可以写入文件,粘贴到Markdown文件中,大部分 Markdown 渲染器都能够识别diff块,比较好地渲染出diff结果。

实际操作中,需要在一个git仓库目录中来执行git diff --no-index,例如比较两个文件:

css 复制代码
git diff --no-index ~/a.py ~/b.py

比较两个目录:

css 复制代码
git diff --no-index ~/folder-a ~/folder-b
相关推荐
周杰伦fans4 分钟前
ASP.NET Core Identity 从入门到实战:常见问题与解决方案
后端·asp.net
平头哥技术团队15 分钟前
Day 16 | 用 ul、ol、li 一个标签,把散资料收成有序的技能清单页
开发语言·前端·html·html5
代码青铜z23 分钟前
不会写代码做小程序,模板开发和AI 编程靠谱吗?创业前先看这 5 件事
前端
n8n24 分钟前
Spring AI 三层架构详解:ChatModel → ChatClient → Controller,同步调用 vs 流式调用(SSE)
后端
小傅哥29 分钟前
Java + DDD,1:1 复刻 Deepseek Harness 项目
前端·后端·ai编程
Lambert28130 分钟前
AgentScope Java 从零(03):Agent 的记性默认全开,我在第 50 轮翻了车
后端·aigc
积硅步致千里37 分钟前
Word 里的 .wmf 其实是 EMF:一次 metafile 转 PNG 排障
前端·后端
mayaairi43 分钟前
Vue2 组件通讯(二):ref、自定义事件与provide/inject实战
前端·javascript·vue.js
爱读源码的大都督1 小时前
DeepSeek面试官问:生产RAG系统回答不准确,该如何定位和优化?这样回答,能让面试官当场给你Offer!
java·后端·python
开开心心就好1 小时前
PDF图片去水印软件,支持批量处理页面
前端·javascript·人工智能·智能手机·pdf·语音识别