关于Git的一点理解

本文详细介绍了Git的四个工作区域及其对应的文件状态,包括Untracked、Unmodified、Modified和Staged。通过实例展示了如何在不同状态间转换,并阐述了如何使用gitadd和gitcheckout命令管理文件状态。此外,还解析了gitdiff的用法,用于比较文件差异。内容深入浅出,有助于理解Git的工作流程。
摘要由CSDN通过智能技术生成

1.GIt的四个区域

请添加图片描述

  • Workspace:工作区,就是你平时存放项目代码的地方
  • Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

2.Git中文件的四种状态

  1. Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  2. Unmodifid: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  3. Modifid: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
  4. Stated: 暂存状态. 使用git add 可以将文件加入暂存区,时刻记住,我们commit 的文件,是当前存在暂存区里面的文件,如果文件被修改了,但是没有更新到缓存区,commit的时候还是提交了未修改的文件!

四种状态如图
请添加图片描述

3.Utracked和Tracked状态转换理解和转换

   我们新建一个项目时,在项目中新建一个新文件,这时候,这个文件就是untracked的,意思就是,git在你上一次commit以后的目录中没有发现这个文件,所以不会追踪这个文件。
在这里插入图片描述

我们需要使用 git add <filename>或者git add .(add所有文件)将文件加入暂存区,此时你会发现,文件变为Stated和tracked
请添加图片描述
然后我们修改hpf.md文件,再次查看状态
请添加图片描述

   有同学就会好奇,为什么会出现一个红色的hpf.md(modifid),和一个绿色的hpf.md。因为我们在修改了hpf.md文件以后,并没有将文件add到暂存区域里面,所以我们如果这时候commit,我们会将没有修改的文件提交到本地仓库

​    以上我们可以得出结论:****git add <文件名>命令,可以将文件加入暂存区,同时如果文件处于Untracked状态,则git会追踪此文件,文件状态变为Tracked

4.明确判断modified和unmodified的参照物

   其次首先明确,modified和unmodified,的参照物是什么?也就是说,我modified和unmodified是以那个区域的状态为参照物的。

我们先使用git status 命令查看(之前已经commit过一次,三个区域的内容一致)

此时,所有文件都是modified,hpf.md中内容是:我在你家
在这里插入图片描述

我们修改hpf.md文件内容为我在海大修电脑,查看stauts
在这里插入图片描述

此时文件已经变为modified,我们将hpf.md放入暂存区,再次查看status
请添加图片描述

还是modified,但是hpf.md的状态变成了tracked。

我们将暂存区代码提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rYDljSDH-1627476748091)(Git.assets/image-20210728180834793.png)]

再次查看状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FFQsPmoz-1627476748091)(Git.assets/image-20210728180904482.png)]

发现hpf.md已经变成modified了。

   从上述的状态我们发现,在没有commit之前,不论我们add文件以前,和add了文件以后,工作区的文件被提交到暂存区,他们都是modified,所以我们可以认为,判断是否modified的参照物是本地仓库中的对应文件的内容。

5.Modified和Unmodified之间相互转换(修改的恢复)

   讨论这个问题的时候,我们首先要明确一个点: 上面的例子也说到,无论是修改了没有add到暂存区,还是add到了暂存区,其状态都是modified。所以我们讨论Modified和Unmodified之间相互转换,需要从两个维度来。

  1. 工作区(add前):使用git resore <filename>恢复到原来(和暂存区或者本地仓库一致)的状态**(以暂存区或者本地仓库为参照(因为还没有add,他们两个内容一致))**
    或者使用git checkout -- <filename>将被修改的文件恢复**(以暂存区为参照单位)!!!注意与git resore <filename>参照的区别**
  2. 暂存区(add后):git restore --staged <filename>或者git reset -- filename将暂存区文件恢复到修改以前(以本次仓库内容为参照,不改变工作区)然后再重复第一步即可。

   将暂存区恢复到指定的commit节点的仓库内容:git reset HEAD -filename HEAD可以是提交的一个号码,用git log可以查看**(只改变暂存区,其他区域不受影响)**

6.git diff 基本用法

  • git diff 什么参数都不加,默认比较工作区暂存区的差异
  • git diff --cached [<path>...]比较暂存区与最新本地版本库(本地库中最近一次commit的内容)
  • git diff HEAD [<path>...]比较工作区与最新本地版本库。如果HEAD指向的是master分支,那么HEAD还可以换成master
  • git diff commit-id [<path>...]比较工作区与指定commit-id的差异
  • git diff --cached [<commit-id>] [<path>...]比较暂存区与指定commit-id的差异
  • git diff [<commit-id>] [<commit-id>]比较两个commit-id之间的差异
  • git diff commit-id1 commit-id2 --stat查看两个提交版本id修改了那些文件.
  • git diff 版本号码1 版本号码2 src 比较两个版本的src 文件夹的差异
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值