Git必知必会基础(07):git diff的使用

本系列汇总,请查看这里https://www.cnblogs.com/uncleyong/p/10854115.html

git diff的作用

git diff主要用于比较差异,比如工作区和暂存区、暂存区和本地仓库、分支和分支等;

git diff可以帮助我们找出代码中的变更,从而更好地管理代码。

数据准备

本地仓库

工作区修改:修改qzcsbj.txt文件

工作区修改:新增test.txt文件

git diff:工作区和暂存区或者本地仓库

当工作区有改动,临时区为空,diff的对比是工作区与最后一次commit提交到本地仓库的共同文件

比较:git diff,结果没test.txt文件

当工作区有改动,临时区不为空,diff对比的是工作区与暂存区的共同文件

提交到暂存区

工作区修改文件:qzcsbj.txt

比较:git diff,结果没test.txt文件

查看指定文件的差异(比较工作区和暂存区):git diff 文件名

git diff qzcsbj.txt,执行结果和上图一样

列出工作区有变更的文件(相对本地分支),不显示变更的具体内容:git diff --stat

截止当前:

工作区内容:

qzcsbj.txt

hello, qzcsbj
666
123

暂存区内容:

qzcsbj.txt

hello, qzcsbj
666

test.txt

hello

本地分支内容:

qzcsbj.txt

hello, qzcsbj

git diff --cached 或 git diff --staged:暂存区和本地仓库

显示暂存区(已add但未commit文件)和最后一次commit(HEAD)之间的所有不相同文件的增删改(git diff --cached和git diff --staged相同作用)

此时工作区和暂存区差异如上面文字描述。

git diff --cached结果,结果有test.txt文件

git diff --staged结果,结果有test.txt文件

git diff HEAD:工作区以及暂存区和本地仓库

显示工作目录(已track但未add文件,也就是不包含首次新增未暂存的文件)和暂存区(已add但未commit文件)与最后一次commit之间的所有不相同文件的增删改。HEAD是指向当前分支的指针

git diff <分支名1> <分支名2>:分支或者commitid对比

比较两个分支上最后 commit 的内容的差别

先把master分支的都提交了

查看当前分支跟指定分支的差异:git diff 分支名

  也可以查看两个历史提交的差异(后者与前者相比):git diff commitid1 commitid2,commitid通过git reflog查看

git diff branch1 branch2 --stat 显示出所有有差异的文件(不详细,没有对比内容),后者和前者的差异,只比较已经commit的

git diff branch1 branch2 显示出所有有差异的文件的详细差异(更详细),后者和前者的差异,只比较已经commit的

应用场景:在合并改动之前,预览差异:git diff <source_branch> <target_branch>

补充:git diff结果的含义

示例1:

diff --git a/qzcsbj.txt b/qzcsbj.txt,表示文件qzcsbj.txt的两个版本
--- a/qzcsbj.txt,---表示更改前的文件
+++ b/qzcsbj.txt,+++表示更改后的文件
@@ -1 +1,2 @@,文件差异的区域,-1表示变更前从第1行到第1行,+1,2表示变更后从第1行到第2行

-hello, qzcsbj
+hello, qzcsbj
+666

-表示删除一行,+表示新增一行

示例2:

本地仓库

工作区:修改上方第一行和第二行,然后中间插入一行

diff结果

diff --git a/qzcsbj.txt b/qzcsbj.txt,表示文件qzcsbj.txt的两个版本
--- a/qzcsbj.txt,---表示更改前的文件
+++ b/qzcsbj.txt,+++表示更改后的文件
@@ -1,2 +1,3 @@,文件差异的区域,-1,2表示变更前从第1行到第2行,+1,3表示变更后从第1行到第3行

-hello, qzcsbj
-tester
\ No newline at end of file
+hello, 666qzcsbj
+job
+tester666
\ No newline at end of file

-表示删除一行,+表示新增一行,如果对一行内容进行修改,在此处体现出来的就是先删除一行,再新增一行

示例3:

diff --git a/text.txt b/text.txt,表示文件text.txt的两个版本
--- a/text.txt,---表示更改前的文件
+++ b/text.txt,+++表示更改后的文件
@@ -2,3 +2,4 @@ hello test,文件差异的区域,-2,3表示变更前从第2行开始,到第3行,+2,4表示变更后从第2行开始,到第4行

第一次修改
第二次修改
test分支:第一次修改
+test分支:第二次修改

+表示新增了一行,-表示删除了一行,如果对一行内容进行修改,在此处体现出来的就是先删除一行,再新增一行

【bak】

### Git Diff 使用方法 `git diff` 是一个强大的命令,用于显示工作目录与索引之间、不同分支之间以及提交之间的更改。以下是 `git diff` 的基本语法及其常见用途: #### 基本语法 - 显示工作目录与暂存区之间的差异: ```bash git diff ``` 这一操作会展示尚未通过 `git add` 提交到暂存区的改动[^1]。 - 显示暂存区与最近一次提交之间的差异: ```bash git diff --staged ``` 此命令适用于查看已经通过 `git add` 添加至暂存区但还未最终提交的内容变化[^4]。 - 比较两个特定分支间的差异: ```bash git diff <branch1> <branch2> ``` 上述指令能够帮助开发者理解从 `<branch1>` 到 `<branch2>` 所做的全部变更。 #### 场景应用 1. **日常开发中的代码审查** 开发者可以在每次提交前运行简单的 `git diff` 来回顾自己的修改细节,从而减少错误提交的可能性。 2. **跨分支对比分析** 当团队成员需要评估某个功能实现或者修复方案时,可以通过比较不同的特性分支来快速定位新增加的功能点或潜在的风险区域。 3. **补丁生成与应用** 在某些情况下,可能希望通过邮件等方式分享具体的代码调整而非整个项目副本;此时可以利用 `git diff` 创建补丁文件,并借助其他工具如 SourceTree 或 TortoiseGit 应用这些补丁[^2]。 4. **历史记录追踪** 如果想要知道某次提交前后发生了哪些改变,则可指定两次提交ID来进行详细的diff操作, 如下所示: ```bash git diff <commit-hash-old> <commit-hash-new> ``` ```python # 示例 Python 脚本来自动化获取最新两次提交间的变化 import subprocess def get_last_two_commits_diff(): result = subprocess.run(['git', 'log', '-n', '2', '--pretty=format:%H'], stdout=subprocess.PIPE) commits = result.stdout.decode().splitlines() if len(commits) >= 2: first_commit = commits[0] second_commit = commits[1] diff_result = subprocess.run(['git', 'diff', f'{second_commit}..{first_commit}'], stdout=subprocess.PIPE) return diff_result.stdout.decode() print(get_last_two_commits_diff()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值