git diff 用法总结

本文详细介绍了如何使用Git diff命令来比较不同状态间的代码差异,包括工作区与暂存区、暂存区与本地版本库、工作区与指定commit-id等,并讲解了如何使用git diff制作补丁文件以及补丁的应用。

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

Git diff

     用于比较两次修改的差异

    1.1 比较工作区与暂存区

      git diff不加参数即默认比较工作区与暂存区

    1.2 比较暂存区与最新本地版本库(本地库中最近一次commit的内容)

      git diff --cached  [<path>...] 

    1.3 比较工作区与最新本地版本库

      git diff HEAD [<path>...]  如果HEAD指向的是master分支,那么HEAD还可以换成master

    1.4 比较工作区与指定commit-id的差异

      git diff commit-id  [<path>...] 

    1.5 比较暂存区与指定commit-id的差异

      git diff --cached [<commit-id>] [<path>...] 

    1.6 比较两个commit-id之间的差异

      git diff [<commit-id>] [<commit-id>]

    1.7 使用git diff打补丁

      git diff > patch //patch的命名是随意的,不加其他参数时作用是当我们希望将我们本仓库工作区的修改拷贝一份到其他机器上使用,但是修改的文件比较多,拷贝量比较大,

      此时我们可以将修改的代码做成补丁,之后在其他机器上对应目录下使用 git apply patch 将补丁打上即可

      git diff --cached > patch //是将我们暂存区与版本库的差异做成补丁

       git diff --HEAD > patch //是将工作区与版本库的差异做成补丁

      git diff Testfile > patch//将单个文件做成一个单独的补丁

    拓展:git apply patch 应用补丁,应用补丁之前我们可以先检验一下补丁能否应用,git apply --check patch 如果没有任何输出,那么表示可以顺利接受这个补丁

       另外可以使用git apply --reject patch将能打的补丁先打上,有冲突的会生成.rej文件,此时可以找到这些文件进行手动打补丁 

  1.8 比较本地版本库与运程版本库

   git diff master origin/master [<path>...]

 1.9 比较本地工作区与运程版本库

  git diff origin/master [<path>...]

  1.10 比较暂存区与运程版本库

   git diff --cached origin/master [<path>...]

  1.11 统计文件的改动

  git diff --stat master origin/master [<path>...]

1.12 确认代码合并情况

   git diff -w [<path>...]

### 使用 `git diff` 命令查看文件差异 #### 查看工作目录与暂存区之间的差异 当开发者想要对比当前的工作目录和暂存区之间存在的不同之处时,可以简单地执行不带任何参数的 `git diff` 命令[^1]。 ```bash git diff ``` 此操作会显示所有未被加入到暂存区中的修改内容。 #### 对比特定提交间的整体项目变化 为了了解某两个历史快照间整个项目的变动情况,可以在命令后面加上要比较的具体提交ID: ```bash git diff 版本号1 版本号2 ``` 这将展示从第一个版本到最后一个版本期间所有的变更详情[^2]。 #### 针对单个或多个文件的变化情况进行分析 如果只关心某些特定文件在这两次提交里的区别,则可以通过如下方式来限定范围: ```bash git diff 版本号1 版本号2 -- 文件名1 文件名2 ``` 上述指令能够精确指出所选文件在给定时间点上的异同点。 #### 获取仅限于统计信息的结果 有时并不需要详细的行级对比,而只是想知道哪些文件发生了改变以及大致的数量。这时可以用带有 `--stat` 参数的形式调用该功能: ```bash git diff 版本号1 版本号2 --stat ``` 这条语句返回的是简洁明了的概览版报告。 #### 考察某一子目录下的结构演变 对于大型工程来说,可能更倾向于关注某个模块内部的发展历程。此时可利用路径作为过滤条件来进行局部审查: ```bash git diff 版本号1 版本号2 src/ ``` 这里假设 "src/" 是源码所在的文件夹名称,实际应用中应替换为目标位置。 #### 将本地副本与远端分支作对照 另外一种常见场景是比较远程仓库里最新的状态跟自己手头拥有的拷贝是否存在出入。为此目的设计了一种特殊的语法形式: ```bash git fetch origin master git diff HEAD FETCH_HEAD ``` 这段脚本先同步最新数据再做两者的并列研究[^3]。 #### 解决权限属性引起的误报现象 最后值得一提的是,在跨平台协作过程中偶尔会出现由于操作系统默认设置造成不必要的冲突提示。为了避免这种情况发生,建议调整配置项使得 Git 不再去检测这些无关紧要的区别: ```bash git config --global core.filemode false ``` 通过这项设定之后,除非确实存在实质性的改动,否则就不会因为读写模式的不同而导致额外的通知了[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值