搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
花生_TL007
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Android 自定义动画:让你的应用更加生动
2
Android-自定义meta-data扩展数据,Android资深架构师分享学习经验及总结_android meta-data
3
IIC总线协议Verilog实现_iic verilog
4
ChatGPT提示词大赏:GPT Prompts Hub 2024年最新ChatGPT提示词项目_chatgpt提示词大赏:gpt prompts hub 2024年最新chatgpt提示词项目 作
5
Python大数据处理中有哪些分布式计算框架?如何选择和使用?_python 大数据处理框架
6
Cisco-HSRP(热备份路由协议)配置+vtp_思科设备切换热备份状态
7
stable diffusion实践操作-大模型介绍-SDXL1大模型_sdxl 1.5模型下载
8
第18节 神级开源shellcode工具:donut_donut shellcode
9
STM32F1开发指南笔记43----SPI FLASH 移植文件系统FatFs_spiflash fatfs
10
跑模型——labelme的json文件转成yolo使用的txt文件(语义分割,目标检测需要自己改改)_语义分割json转txt
当前位置:
article
> 正文
Git学习篇之git diff
作者:花生_TL007 | 2024-05-31 23:44:18
赞
踩
git diff
Git学习篇之git diff用法详解
一、git diff 和 git diff HEAD – < file> 用法介绍
首先明确:git相较于其他版本控制系统的优越性,在于管理和跟踪的是修改,而不是文件。我们引入 git diff 来说明。
下面是工作区和暂存区的工作示意图
工作区:即用户桌面上的可见可操作目录。
版本库 = 暂存区(stage) + 分支区(master)
1.git diff 用法:
git diff 中 diff 即 different 的意思,表示在 git 中查看修改的状态。
此时要注意的是:
两种情况,那么对应的git diff 结果则表示不同的含义。
(1)当暂存区(stage)不为空,表示工作区和当前暂存区内容变化的区别。
(2)当暂存区(stage)为空,表示工作区和最新版本库的内容变化区别。
2.git diff HEAD – < file >用法:
表示工作区和当前版本库的内容变化区别。HEAD表示分支区master中的指针指向,file表示的是工作区内的文件。
二、具体用法比较:上图说明
步骤1.在Notepad++中,编辑文件readme.txt,demo1。
步骤2.输入 cat 命令,查看文本内容,并通过get add 命令,把文件修改添加到暂存区(stage)。
步骤3.修改文本内容为demo2后,输入 cat 命令查看文本。
重点来啦!!!此时,我们已经完成的内容有:
1. 在工作区: 编辑demo1文本 ——> 2. 输入git add 命令,此时demo1已被添加到暂存区 ——> 3. 在工作区:修改demo1为demo2 ,demo2未被添加到暂存区。
输入 git diff 如图:
+ 代表工作区中的新增变化内容,- 代表版本库内的新增变化内容。(可以理解为显示两者内容的区别)
原因解释:此时的暂存区中不为空(git diff 第一种情况),存在第2步中被 add 命令添加的 demo1。因此diff 此时比较的是工作区和暂存区的新增变化内容。 工作区此时新增修改demo2,而暂存区新增demo1。
输入 git diff HEAD 如图:
输入 git diff HEAD – < file >如图:
原因解释: git diff HEAD – < file >表示工作区和当前版本库的内容变化区别。HEAD表示分支区master中的指针指向,file表示的是工作区内的文件。
图中相比于git diff 没有出现的demo1而是出现了tracks changes of files
,表示此时版本库内已接收了工作区的修改,即git add 操作,但是由于没有 commit 上传操作,stage区添加的文件无法传递到分支区,因此HEAD指针无法具体指向。所以,对于版本库来说,只能接收到有文件修改但是无法具体指明。
我们都知道,把文件添加到版本库分两步, 1、git add 添加到暂存区 2、git commit --m < message > 上传到分支区。
步骤4.输入 git commit 命令,上传demo1。
输入git diff 和 git diff HEAD 查看变化:
此时,在工作区中:仍有demo2, 而在版本库中,暂存区中的文件被上传到分支区中,而暂存区目前已为空,这个后面会讲为什么是空?
+ 代表工作区中的新增变化内容,- 代表版本库内的新增变化内容。(可以理解为显示两者内容的区别)
原因解释:输入 git diff (此时是git diff 的第二种情况) ,从结果上看, 此时的结果不再是
tracks changes of files
而是 工作区中存在demo2。
这是因为,版本库中此时存在demo1,因为暂存区此时为空, 通过git commit 操作已将修改提交到了分支区中,
而此时的diff 比较的是工作区和版本库的最新内容变化,因此demo1可在版本库中的分支区找到。
原因解释: 输入git diff HEAD – < file >表示工作区和当前版本库的最新内容的变化。HEAD表示分支区master中的指针指向,此时指向了demo1,而file表示的是工作区内的文件,此时存在demo2。
这便可以解释,为什么当暂存区为空时,diff 和 diff HEAD的结果一样。
步骤5.完成以上操作后,现在的情况是:
在工作区中,存在demo2(来自demo1 的修改);
在暂存区中,无;
在分支区中,diff 和 diff HEAD指向demo1。
6.我们此时来看看,为什么git commit操作后,暂存区中就为空。(反证法:假设git add 后,暂存区不为空)
输入git add,重新将工作区中的demo2修改添加到暂存区。
输入git diff 和 git diff HEAD 查看结果。
我们看到的是,此时输入git diff 我们发现结果无显示,,而输入git diff HEAD后,结果与为进行 add 添加操作前一样!版本库中存在demo1。
那么我们是不是可以这样理解,如果说经过git add demo2 后,此时的暂存区中仍保存着之前 git add 操作的demo1, 那么git diff 应该不为空,(也就是diff的第一种情况),那么此时比较的是工作区和暂存区的内容变化。
在上一条成立的条件下,然后,我们再看git diff HEAD 后的结果。git diff HEAD按道理比较的是工作区和版本库最新内容的变化,那么此时上一步的 git add 操作已经将工作区中的demo2 添加到了暂存区,那么输入 diff HEAD结果应该同步骤1中的diff HEAD,出现
tracks changes of files ,而不是版本库中存在demo1。
结论:因此,我们得知,在进行git add操作后,工作区中的修改被添加到了暂存区,而随着git commit 操作的进行,暂存区的内容被一次性上传到了分支区中,暂存区此时为空!!!
7.输入 git commit 命令,将demo2上传至分支区。来验证以上结论。
此时,由于暂存区的demo2 通过 git commit 命令上传至分支区,此时暂存区为空, 输入git diff 和 git diff HEAD结果一样, 都表示工作区和版本库最新内容变化!
结尾:对git diff 和 git diff HEAD 的用法就说到这里,理解的关键,还是要通过测试,有不对的地方还请大家多多评论指正!
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/花生_TL007/article/detail/654973
推荐阅读
article
git
生成
多个
patch
_
Git
生成
patch
的方法(
diff
and
format
...
文章目录
Git
生成
patch
的方法(
patch
就是补丁)注:因为博主用的是linux系统,所以运行的环境均在linux...
赞
踩
article
>
diff> &
>
patch> 制作及
>
打补丁>_
>
>
modify>.
>
patch>...
在移植或版本升级过程中,手动比对(用比对工具)转换是很费力的事情,特别是发生变化的文件非常多的情况下,“制作补丁、
>
打补丁>...
赞
踩
article
《
Git
常用命令
》详细讲解·第2篇(
git
status
和
git
diff
)_
git
diff
--
...
查看状态——
git
status
命令用于显示工作目录和暂存区的状态。它可以告诉用户哪些修改被暂存到下次提交中,哪些修改...
赞
踩
article
Visual
Studio Code之
git
history
_
git
history
diff
...
在技术员的工作中,大家都会用到
git
。用
git
时,想要看某一个文件或某一条代码的操作时,大家会有什么方法呢?方法一:可以...
赞
踩
article
linux
git
patch
和
patch
以及
git
diff
命令...
1.
git
log 查看commit id,修改前为id1,修改后id22.根据id1到id2有几次提交来生成几个pat...
赞
踩
相关标签
git 生成多个patch
git status
git diff
显示Git状态
显示Git控制子模块的状态
Git修改和提交
Git常用命令
显示git暂存前的差异
vscode
git history
git
操作系统
java