本篇博文旨在介绍git的工作区,暂存区和版本库的概念;并说明使用git add、git commit 等指令时,对工作区,暂存区以及版本库分别造成的结果;

对于会使用git的人,git add,git commit,git checkout ,git reset这些指令应该很熟悉了

我们一般使用git,修改好文件后,会用git add 文件名,git commit -m 备注这两条指令,然而他们的作用是什么呢?为什么不一条指令直接就OK了?

关于为什么需要暂存区,我们在文章末尾解答

工作区、暂存区以及版本库的概念

工作区(Working directory)

将一个文件夹通过git init 设置成一个git可以管理的文件夹时,这个文件夹里的内容就是工作区

版本库(repository)

当工作区生成后(git init),在Linux下用 ls -a 查看可以发现

除了 . / ../ 还有个 .git

这个 .git 就是版本库

注意:工作区是除了版本库之外的其他内容

暂存区(stage / index)

暂存区,叫stage 或者 index ,是用来暂时存放工作区中修改的内容;

可以理解为一个中转站

通过下图来深入理解工作区、暂存区和版本库

细心观察上图的童鞋会发现,除了工作区,暂存区,版本库,还有个东西就是object和master

什么是object

object是git对象库,是用来存储各种创建的对象以及内容

什么是master

master我们也经常用到,它是我们的主分支

当我们git init后,并不会立刻产生分支

而是我们添加了一个文件,并git add,gitcommit后

这时我们查看分支情况

便可以看到master分支了

并且悄悄告诉你,分支都存在在.git/head/refs目录下

什么是HEAD

HEAD是一个引用,引用的是当前的分支

如果当前处于master分支,那么HEAD就会指向master

如果当前切换到Dev分支或者其他分支。那么HEAd就会指向该分支

几个对三个区造成影响的指令

1、git add

当我们使用git add 指令时,就是将对应修改的文件添加到暂存区中

这时,暂存区中的目录树被更新

2、git commit

紧接着,我们使用git commit指令,便会将暂存区中做出的修改提交到版本库中

这时master指向的分支被更新

3、git reset HEAD

当使用git reset HEAD 指令时,暂存区的内容会被版本库的内容覆盖

4、git checkout --file

使用git checkout --file时,是将工作区指定修改的文件被暂存区的内容覆盖(消除所有工作区进行的改动),这个动作很危险

git checkout . 也是如此,该指令是将所有修改的文件被暂存区的内容覆盖

5、git rm --cached

使用git rm --cached file时,直接从暂存区进行文件的删除,不会影响工作区的内容

6、git checkout HEAD --file

git checkout  HEAD --flie 时,会将版本库中的对应的文件内容直接替换工作区和暂存区中的该文件

这个动作也是危险的,同样git checkout HEAD . 是将所有的内容替换工作区和暂存区的文件

如何查看三个分区的区别

git diff 查看工作区和暂存区的区别

git diff --cached 查看暂存区和版本库之间的区别

git diff HEAD 查看工作区和版本库之间的区别

git status 查看当前的工作状态

为什么需要暂存区

假设一个场景:

当你自己工作时,写文件写了一半,没有commit交给版本库时

突然上司告诉你有一个Bug要紧急处理,但是完成自己的工作还需要两天时间

这时,你不能commit提交给版本库,因为你没做完,这样会影响到其他人的工作

试想:

如果没有暂存区,你修改的文件只可以立刻保存到版本库中,这样很容易对别人的工作造成影响

所以我们需要暂存区

上述场景解决步骤

1、利用git stash将自己的工作隐藏

2、新建一个bug分支来处理bug

3、处理完后,利用stash pop将隐藏的文件弹出

4、继续工作

【Git】工作区、暂存区与版本库相关推荐

  1. 【原创】Git删除暂存区或版本库中的文件

    0 基础     我们知道Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited),下面只是简述下Git的大概工作流程,详细的可以参见本博客的 ...

  2. Git使用汇总之工作区、暂存区、版本库

    前言 初次接触git的时候最让人迷惑的无非是这三者的概念和他们之间的关系,搞懂这三个概念和他们之间的关系,可以说你对git了解已经三分熟了. 下面这个图展示了工作区.版本库中的暂存区和版本库之间的关系 ...

  3. Git 工作区、暂存区和版本库

    基本概念 我们先来理解下Git 工作区.暂存区和版本库概念 工作区:就是你在电脑里能看到的目录 暂存区:英文叫stage, 或index.一般存放在 ".git目录下" 下的ind ...

  4. Git 的工作区、暂存区、版本库—— Git 学习笔记 15

    Git 的工作区.暂存区.版本库 大家都知道,在 Git 系统中有 "三棵树" 的概念. 注意:"树" 在这里的意思是 "文件集合",而不是 ...

  5. git中的工作区,暂存区,版本库

    git status  用于查看哪些文件被暂存了 红色:工作区与版本库之间对比 ,说明没有被暂存 git add .  (工作区的内容添加到暂存区) 黄绿色:暂存区和版本库,说明被暂存

  6. git 理解 节点、工作区、暂存区、版本库

    git树结构: git树结构每个节点都是一个commit的快照,它包含了三个重要概念:节点,HEAD指针,Branch指针 1.节点:git使用commit之后就会生成一个节点,之前的节点成为这个节点 ...

  7. Git学习笔记之三:Git 工作区、暂存区和版本库

    基本概念我们先来理解下Git 工作区.暂存区和版本库概念 工作区:就是你在电脑里能看到的目录. 暂存区:英文叫stage, 或index.一般存放在 ".git目录下" 下的ind ...

  8. Git的学习之路02 Git的工作流程、工作区、暂存区、版本库及创建版本库

    Git的一般工作流程如下: 克隆 Git 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修改. 提交修改. 在修改完成后,如果发现错误,可以撤回提 ...

  9. 2.Git的工作区、暂存区和版本库(慕课网)

    先来理解下Git工作区.暂存区和版本库概念 工作区:就是你在电脑里能看到的目录. 暂存区:英文叫stage, 或index.一般存放在".git目录下" 下的index文件(.gi ...

  10. 【Git】Git概述、Git安装和使用、工作区,暂存区和版本库

    文章目录 一 Git概述 1 Git简介 2 GIt的职责 3 Git的架构 (1)集中式版本控制系统 (2)分布式版本控制系统 4 下载安装 二 Git使用 1 创建版本库 2 配置签名 (1)方法 ...

最新文章

  1. R语言ggplot2可视化:自定义设置连续变量图例(legend)宽度(width)、自定义设置连续变量图例位置(position)、自定义设置连续变量图例连续渐变
  2. Godaddy如何导入导出MSSQL数据库
  3. SpringBoot中使用Thymeleaf常用功能(二):测试Thymeleaf条件判断
  4. weekend110(Hadoop)的 第二天笔记
  5. Java Graphics类的绘图方法
  6. 关于服务网关的几个问题
  7. Mycat安全_SQL拦截白名单---MyCat分布式数据库集群架构工作笔记0033
  8. Unity3D 显示FPS
  9. msgbox.html5.qq.com,怎样制作qq透明背景皮肤
  10. 追求得到之日即其终止之时, 寻觅的过程亦即失去的过程。——村上
  11. 盈利“晴空”下,唯品会拨不开的“乌云”
  12. 微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例
  13. python字符串排列组合子集_python编程题:字符串的(所有可能的)排列组合
  14. 毒论--不要再面向对象(续)
  15. FPGA开发 Quartus Signaltap的基本使用
  16. 带外通道技术(OOB)总结
  17. python发明家_Python版多图表范例
  18. 嵌入式 Linux 驱动开发你想知道的都在这
  19. HCIE-Cloud Computing LAB备考第二步:实战解题–第五题:论述一--双活容灾设计--记忆宫殿
  20. 【c语言】求 1000 以内全体素数之和

热门文章

  1. 一位16年老员工的反思:什么才是真正的执行力?
  2. Windows XP 黑屏补丁
  3. 将 SVN Repositories 内部的下层目录,提升成为顶层 Repositories 的风险
  4. Gtalk怎么样绑定MSN帐号?
  5. sqlserver2000数据库迁移到2008R2
  6. [蓝桥杯解题报告]第九届蓝桥杯大赛省赛2018(软件类)真题C++A组 Apare_xzc
  7. B站笔试真题之[编程题]脸滚键盘
  8. 18、Python第二节
  9. CCKS2019总结
  10. 如何隐藏PickerView的两条线