git diff

博客介绍了Git工作区和暂存区相关知识,可通过git status查看状态,git add将修改放至暂存区,git commit提交到分支。还说明了git diff能显示已加入版本库文件在工作区和暂存区的内容差异,如“ + ”“ - ”的含义,以及用cat命令获取工作区内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

工作区和暂存区:
https://www.liaoxuefeng.com/wiki/896043488029600/897271968352576
可以用git status查看状态
git add(git stage)命令实际上就是把要提交的所有修改放到暂存区(stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

正文

git diff                 比较工作区和暂存区(最新一次add)的差异
git diff --cached        比较暂存区和版本库(最新一次commit)的差异
git diff --staged        比较暂存区和版本库(最新一次commit)的差异
git diff --HEAD          比较工作区和版本库(最新一次commit)的差异(注意:HRAD不能小写)
git commitID1 commitID2  比较两个commit之间的区别

补充:
git diff 显示的是已被add到版本库的文件,在工作区和暂存区中的内容差异。
举例:

  工作区            暂存区            版本库
hello,git!        hello,git!       hello,git!
I do                I do              I do
add xxx            add xxx          add xxx
add yyy            add yyy          add yyy
I like              I like            I like
I love              I love            I love
hello               hello             hello
go                    go
gggg

在这里插入图片描述
其中“ + ”代表工作区新增内容;“ - ”代表版本库新增内容。
补充:
cat 文件名:得到的是工作区内容。

<think>好的,我现在需要给用户解释一下Linux中的git diff命令。首先,我得回想一下自己对这个命令的了解。记得git diff是用来比较不同版本之间或者工作区与暂存区之间的差异的,对吧?不过具体怎么用可能得仔细理清楚,避免说错了。 用户可能想知道git diff的基本用法,所以我应该从最常见的几种情况入手。比如比较工作目录和暂存区的区别,这时候用git diff不带参数就可以了。然后是暂存区和最新提交之间的差异,这时候需要git diff --staged或者--cached,这两个选项好像是一样的,得确认一下,避免混淆用户。 接下来,用户可能还想知道如何比较不同提交之间的差异。比如比较两个分支,或者两个具体的commit哈希。这时候可以用git diff commit1 commit2,或者用分支名代替。另外,HEAD^和HEAD的比较也是常见的情况,用来查看最近一次提交的改动。 还有,git diff可能会有一些选项,比如--stat查看简略统计信息,-w忽略空格变化,或者--color-words按单词显示差异。这些选项对用户来说可能有用,应该提到几个常用的,但不需要全部列举,以免信息过载。 需要注意用户可能对某些术语不太熟悉,比如工作区、暂存区、HEAD等,可能需要用简单的中文解释一下。比如,工作区就是当前正在修改的文件,暂存区是已经git add过的文件,HEAD代表最新的提交。 另外,示例很重要,用户看了例子更容易理解。比如,给出几个具体的命令和输出样例。不过输出可能比较长,需要说明每个部分的含义,比如diff --git开头的文件路径,---和+++表示修改前后的文件,@@行显示改动的位置,以及具体的加减行。 还要注意可能出现的误区,比如git diffgit status的区别,前者显示具体改动内容,后者只显示文件状态。这时候可以简单对比一下,帮助用户区分。 最后,可能还需要提到git diff在不同场景下的应用,比如合并冲突时查看差异,或者准备提交前检查改动。如果有时间的话,可以稍微提一下如何将diff输出保存为补丁文件,不过这可能属于进阶内容,用户如果只需要基础介绍的话,可能不需要深入。 整理一下结构,先介绍git diff的作用,然后分情况说明不同的使用方式,包括工作区与暂存区、暂存区与仓库、不同提交之间,再讲一些常用选项,最后举例说明。确保用中文简洁明了地解释,避免技术术语堆砌,同时保持准确性。 检查是否有遗漏的情况,比如比较某个文件在不同版本中的差异,可以用git diff commit1 commit2 -- filepath。或者比较当前工作区和某个提交的差异,比如git diff HEAD~3 -- src/。这些情况可能对用户有帮助,也应该包括进去。 还有,可能用户会混淆git diffgit difftool,后者是用图形化工具查看差异,但用户的问题是关于git diff,所以不需要展开,除非有必要提到。 总之,结构大致分为:简介、常用用法(分不同比较对象)、常用选项、示例说明、使用场景。这样用户能逐步了解,结构清晰。确保每个部分都有明确的标题或分段,用列表或代码块区分命令和示例,符合用户要求的格式。</think>### Linux `git diff` 命令详解 `git diff` 是 Git 中用于比较文件差异的核心工具,可帮助开发者查看代码修改内容。以下是其常见用法及示例: --- #### **1. 基本作用** - 比较 **工作区**(未暂存)与 **暂存区**(已暂存)的差异。 - 比较 **暂存区** 与 **仓库最新提交**(HEAD)的差异。 - 比较不同 **提交**、**分支** 或 **标签** 之间的差异。 --- #### **2. 常用场景与命令** ##### **场景 1:工作区 vs 暂存区** ```bash git diff ``` - **作用**:查看工作目录中已修改但未暂存(未 `git add`)的文件差异。 ##### **场景 2:暂存区 vs 最新提交(HEAD)** ```bash git diff --staged # 或 git diff --cached ``` - **作用**:查看已暂存(已 `git add`)但未提交的文件差异。 ##### **场景 3:比较两次提交** ```bash git diff commit1 commit2 ``` - **示例**: ```bash git diff HEAD~2 HEAD # 比较前两次提交与最新提交 git diff main dev # 比较两个分支的差异 ``` ##### **场景 4:比较特定文件** ```bash git diff commit1 commit2 -- 文件路径 ``` - **示例**: ```bash git diff HEAD~3 HEAD -- src/app.py # 比较 app.py 在最近3次提交中的改动 ``` --- #### **3. 常用选项** | 选项 | 作用 | |------|------| | `--stat` | 仅显示修改统计(如改动文件列表和行数) | | `-w` | 忽略空格差异 | | `--color-words` | 按单词高亮差异(适合英文文本) | | `> patch.diff` | 将差异输出保存为补丁文件(如 `git diff > patch.diff`) | --- #### **4. 输出示例解析** ```diff diff --git a/file.txt b/file.txt index 7898192..6a8b5a9 100644 --- a/file.txt +++ b/file.txt @@ -1,3 +1,4 @@ Hello World -This is old text. +This is new text. +Added a line. ``` - `--- a/file.txt`:修改前的文件。 - `+++ b/file.txt`:修改后的文件。 - `-` 开头:被删除的行。 - `+` 开头:被新增的行。 --- #### **5. 常见问题** - **`git diff` 与 `git status` 的区别**: - `git status` 仅显示文件状态(如已修改/未跟踪)。 - `git diff` 显示文件内容的具体改动。 - **图形化工具**:若需更直观的界面,可使用 `git difftool`(需预先配置如 `meld` 或 `Beyond Compare`)。 --- 通过 `git diff`,开发者可以精准定位代码变化,是代码审查和问题排查的重要工具。建议结合实际场景练习以加深理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值