在使用git开发时,有三个概念需要知道,工作区,暂存区和版本库。工作区就是直接进行操作的地方,版本库是要将修改提交的地方,那么暂存区是干什么的呢?下面将对暂存区深入研究。

  一.修改后能直接提交吗?

  在工作区修改后能直接执行git commit提交吗?让我们一起试试。

  首先修改welcome.txt文件

  echo "welcome">>welcome.txt

  使用git diff查看工作区和版本库的差异。

  

  上面显示修改了welcome.txt文件。既然修改了工作区,那就直接提交吧!

  

  提交失败,提示没有要提交的东西。

  执行git status -s查看当前状态(这里使用status的别名,在上一篇git初体验中有提怎么配置别名)

  

  现在只有再执行git add welcome.txt

  再次执行执行git status -s查看当前状态

  

  我们比较一下在执行git add前后的状态可以发现两点不同。首先第一次M是红色,第二次是绿色,另外第一次M前面有空格,第二次M后面多一个空格。这代表什么含义呢?其实M都是修改了的意思,只不过两次修改代表不同的比较方式。第一次是工作区和版本库进行比较的结果,第二次是暂存区和版本库比较的结果。

  现在继续提交

  

  二.理解暂存区

  在版本库,.git目录下有一个index文件,下面我们来测试一下这个index文件

  1.执行ls --full-time .git/index查看index文件的时间戳为13:23:19

  

  2.执行下面命令修改welcome.txt的时间戳

  

  看见了吧,时间戳改变了,这个实验说明当你操作工作区的某个文件时,它的时间戳就会改变。这样有什么好处呢?其实这样做能够提高git的效率,当比较工作区某个文件是否改变时,会先看它的时间戳有没有改变,如果时间戳没有改变就不用打开文件比较内容了。这样在项目文件内容都很庞大时,效率提高很多。

  下面是工作区和版本库中的暂存区的关系

  

  上图左侧是工作区,中间是暂存区,右侧是master分支的目录树。

  执行git add . 命令可以将工作区的修改添加到暂存区,执行git checkout <filename>可以暂存区的文件同步到工作区,也就是让工作区和暂存区保持一致。

  执行git rm --cached <filename>命令可以移除暂存区特定文件。

  执行git commit命令可以提交暂存区修改,master分支目录树会做相应更新。

git暂存区的更多相关文章

  1. 【原创】关于Git暂存区的理解

    关于Git暂存区的理解      暂存区可以说是Git的三大重要的区域之一,另外两个分别是工作目录和Git仓库,所以说对暂存区的深入理解可以帮助我们理解很多Git命令背后隐藏的工作原理.今天,本文将以 ...

  2. 第二节《Git暂存区》

    在上一节中我们的demo版本库经历了一次提交,我们可以使用git og --stat查看一下提交日志. [root@git demo]# git log --statcommit 986a1bd458 ...

  3. Git学习之Git 暂存区

    ============================= 修改文件后是否可以直接提交 ============================ (1) 向文件中追加一行内容  $ echo &quo ...

  4. git 填坑之 git 暂存区忽略文件

    今天修改公司项目文件的时候,发现被修改的文件的始终不显示已经被修改. 本来是想要把 KWh 改成 kWh,然后执行 git status 后,没有文件修改记录: 开始分析究竟是因为什么导致的这样诡异的 ...

  5. idea 编辑器Git暂存区的使用

    平时在开发时候 一般线上环境和线下环境区别会很大,所以一下线下的自己测试环境的代码没有如果提交会影响线上环境,所以一般都会使用git的一个暂存区作为临时存放不需要提交的代码,这样每次提交代码都可以在不 ...

  6. 完整学习git二 git 暂存区

    1 git log 命令查看提交日志信息 git log --pretty-fuller #详细查看 git log --stat #查看每次提交的文件变更 git log --pretty-onli ...

  7. Git 暂存区

    可以用 git log 查看提交日志(附加的 --stat 参数可以看到每次提交的文件变更统计). $ cd /path/to/my/workspace/demo $ git log --stat 如 ...

  8. Git权威指南学习笔记(二)Git暂存区

    例如以下图所看到的: 左側为工作区,是我们的工作文件夹. 右側为版本号库,当中: index标记的是暂存区(stage),所处文件夹为.git/index,记录了文件的状态和变更信息. master标 ...

  9. Git 暂存区的概念

    工作区:我们在电脑里面能看到的目录,也就是我们用git init 命令初始化的那个目录.里面包含要添加文件和需要提交的文件,在这个目录下的文件,修改和变更,我们的git都能感知的到. 版本库:工作区有 ...

  10. git学习(四):理解git暂存区(stage)

    与一般的版本管理不同的是,git在提交之前要将更改通过git add 添加到暂存区才能提交(git commit).即使是已经交给了git来管理的文件也是如此.这里继续学习git的暂存区. 通过git ...

随机推荐

  1. 2019年React学习路线图

    作者|javinpaul 译者|无明 之前我们已经介绍了 2019 年 Vue 学习路线图,而 React 作为当前应用最广泛的前端框架,在 Facebook 的支持下,近年来实现了飞越式的发展,我们 ...

  2. 你(可能)不知道的 web api

    转自奇舞周刊 简介 作为前端er,我们的工作与web是分不开的,随着HTML5的日益壮大,浏览器自带的webapi也随着增多.本篇文章主要选取了几个有趣且有用的webapi进行介绍,分别介绍其用法.用 ...

  3. 0xC0000005: 写入位置 0x00000000 时发生访问冲突的解决办法(转)

    上面的意识就是你吧值付给了不该赋给的变量,或者说你把值付给了不能付给的变量(或者常量) ()最简单也最直接的错误可能就是scanf()的问题,我们都知道输入的时候都是scanf("%格式&q ...

  4. jquery 给a标签绑定click

    一. <div id="main"> <div class="tab-content"> <div class="con ...

  5. ubuntu 搜狗输入法内存占用太多,卡顿不够处理办法

    1.  输入 free -m  查看是否内存不够导致卡顿 2. 输入  gnome-system-monitor 打开ubuntu 任务管理器 找到搜狗输入法结束进程 3. 完美解决

  6. 卸载Anaconda

    conda install anaconda-clean anaconda-clean --yes Anaconda 安装的时候在 .bash_profile中添加了变量: export PATH=& ...

  7. Spring解决循环依赖

    1.Spring解决循环依赖 什么是循环依赖:比如A引用B,B引用C,C引用A,它们最终形成一个依赖环. 循环依赖有两种 1.构造器循环依赖 构造器注入导致的循环依赖,Spring是无法解决的,只能抛 ...

  8. 在Delphi中使用系统对应文件类型的图标

    在应用程序的编写中,组合框(ComboBox).列表框(ListBox).等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标.在一般的Windows应用程序中,这些图标的显示都要随列 ...

  9. SpringMVC·form表单Date类型问题导致的400问题

    问题描述 前端传yyyy-MM-dd hh:mm:ss格式的时间其实是String类型导致JavaBean中的Date类型Setter报错,从而导致api请求400. 问题解决 我的解决方式: 在对应 ...

  10. PHP基础知识总结(五) php面试题

    1.Ajax跨域 json:数据交换格式,{"name":"wangtianle"} jsonp:非官方跨域数据交换协议,可以通过动态添加<script/ ...