git工作区、暂存区、版本库之间的关系

区分三者关系

Git最让你迷惑的无非是它里面的各种概念了,如果是刚开始接触Git希望看完本篇介绍之后有一个清晰的认识,笔者认识也有限这里只说说个人对使用Git的感受,说一下它里面的几个最常用的概念的理解。

在初始化git版本库之后会生成一个隐藏的文件 .git ,可以将该文件理解为git的版本库 repository,而我们自己建立的项目文件夹即工作区 working directory ,在.git 文件夹里面还有很多文件,其中有一个index 文件 就是暂存区也可以叫做 stage ,git还为我们自动生成了一个分支master以及指向该分支的指针head ,如下图

从图中可以看出来respository包括分支master和stage, working diretory 可以理解为我们打开开发环境如eclipse,里面的内容即工作区的内容,在工作区里面有的代码以及配置文件等我们需要提交到版本库里面,最终是到了分支master上面,暂存区只是一个临时保存修改文件的地方。

实例讲解

平时我们使用的命令git add file1 是把文件从工作区提交到暂存区,git commit -m "prompty" file1 是把文件从暂存区提交到了分支master下面,这里因为只有一个分支master,就提交到master上了,下面让我们再来结合具体例子来说明一下。

我们修改一下tgb.txt文件增加一行 "l love you" ,并新建一个文件 test1.txt,现在还没有执行git add命令,这种修改都还停留在工作区内,用git status查看状态,如图

上图表明修改并没有在暂存区里面,当我们执行git add test1.txt ,git add tgb.txt后,再来看一下状态

这两个文件被添加到了暂存区,但是还没有提交,当执行git commit -m "tijiao" 后文件即从暂存区到了master分支上面,如图将看不到暂存区里面有什么内容。

Git管理的是添加到暂存区里面的修改,包括增删改等等都算是可以跟踪的文件变动,也可以说git只管理我们变动的部分变动的我们才往暂存区提交,这也是git比其他版本系统设计优秀的一点,以后,会详细说一下各个版本系统管理文件是如何管理的,他们的设计思想是什么。

通过三个命令理解

下面还有一个需要注意的git diff 命令的差异:

git diff 比较的是工作区和暂存区的差别
  git diff --cached 比较的是暂存区和版本库的差别
  git diff HEAD 可以查看工作区和版本库的差别

通过一个添加文件既可以明显看出他们之间区别,不过这里有一个前提是已经提交到暂存区的文件修改的时候才可以看出明显区别,这也是以为啥git只能跟着提交到暂存区的文件,如果只是在工作区新建一个文件,那么输入这三个命令都没有结果为空白。

我们继续修改tgb.txt,在文件末尾添加  we are good boy.

分别输入三个命令,效果为:

从图中可以看出,工作区与暂存区、工作区与版本库都有变化,而版本库与暂存区并没有变化。进一步执行git add tgb.txt

执行git add tgb.txt之后发现git diff没有输出内容,表明工作区与暂存区已经同步,暂存区与版本库、版本库与工作区没有同步。最后一步执行git commit

当执行完git commit后,三个命令都没有输出结果,表明我们修改的文件已经被同步的版本库,已经被版本库管理起来了。

总结:

版本库管理文件会很方便尤其是代码,等好多的命令熟了之后也会觉得并不是那么难用,主要使用的时候觉得git反应比较快,而且速度还可以,现在很多人都在window开发而喜欢具有界面的版本工具软件,而不去学习git命令,学习一些git 命令还是很有用的,假如让你去linux上面开发或者在linux系统上面管理代码,你就会完全束手无策不懂原理也不懂命令,需要从新学习从新认识git。

可以说各种命令是git的根本,学习了命令无论哪一个界面管理工作一看也就会了,现在有好多的git可视化工具,不如学几个命令,况且再多的界面底层也是调用这么多的命令来实现的,有了界面就让我们变懒了,降低了开发者的水平,提高开发效率的同时也失去了更多的学习、研究机会。

分类: 其他

git 工作区、暂存区、版本库(本地)、远程版本库区别相关推荐

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

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

  2. 文件在IDEA中已进行Git的Commit操作,使其从暂存区提交到本地仓库,但是未Push到远程仓库,此时进行Pull操作出现代码冲突

    问题描述:文件在IDEA中已进行Git的Commit操作,使其从暂存区提交到本地仓库,但是未Push到远程仓库,此时进行Pull操作出现代码冲突 解决方法:出现上述情况时,我们要先将文件从本地仓库中拉 ...

  3. Git——三大分区【工作区 / 暂存区 / 版本区】

    前言:Git作为一个版本管理工具,最核心组成思想是它的三个分区:工作区.暂存区和工作区. 1. 工作区   Git的工作区也就是我们平时编辑代码的目录文件夹. 2. 暂存区   暂存区就是一个暂时放置 ...

  4. git 将暂存区文件提交_git 暂存区

    一.Git基本工作流程 1.初始化一个仓库 git  init git  clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 Git 中: 第二种是从一个服务器克隆一个现有 ...

  5. Git 的暂存区(staging area)理解

    通常在很多传统集中式版本控制系统中,只有两个空间用来管理你的数据,一个是你的working copy(工作区),另一个便是 datastore(版本库),然而在Git中,引入了staging area ...

  6. git 将暂存区文件提交_Git知识

    Git 快速开始 一. 下载git 地址 : https://git-scm.com/downloads 二.git基础 1.git config 相关命令 # local 只对某一个仓库有效git ...

  7. git 将暂存区文件提交_git文件状态,暂存与提交

    git中文件的状态有两种:已跟踪或者未跟踪. 从现有目录中创建git仓库 git init git仓库(repository),也叫做版本库.使用git的目的是管理项目,并且保存一些随时间变化的文件. ...

  8. git 将暂存区文件提交_git基础命令之提交文件

    原标题:git基础命令之提交文件 测试百晓生 ceshibaixiaosheng 测试圈懂的最多的人,跟着百晓生一起学测试,你定会有收获.我就在你的口袋,你--有问题难得倒我吗? PS:一颗安利,百晓 ...

  9. Git - stash(暂存区) 用法

    使用场景 功能开发一半,改了个BUG需要提交,此时就需要把开发功能的改动代码暂存起来,将BUG修改内容进行提交并推送,推送后再恢复原有改动 执行流程 先git commit要提交的内容 将剩下内容通过 ...

  10. 16、git删除暂存区文件

    一.查看文件 git status -s 二.删除文件 git rm --cached (文件路径)只删除暂存区文件 git rm --f(文件路径)删除暂存和物理文件

最新文章

  1. bzoj29894170: 数列
  2. .Net开发笔记(十九) 创建一个可以可视化设计的对象
  3. CodeForces - 1288C Two Arrays(组合数学)
  4. mysql ssd tps 上不去_转【案例分享】压测TPS上不去
  5. MFC中CString类字符串用法小结
  6. 移动Web开发的十条军规
  7. zuul 自定义策略_如何为您的社区定义指标策略
  8. 微信推出QQ小程序遭网友吐槽:请不要俄罗斯套娃
  9. envi窗口滤波_高光谱ENVI图像处理之滤波
  10. MySQL生产库主从重新同步操作注意事项
  11. 多路温度采集计算机网络监测设计,多路温度采集
  12. 【学习中】王者荣耀游戏拆解分析(1)
  13. 0基础前端开发,html5建站教程
  14. ubuntu 安装chrome并禁止提示更新
  15. 2014年3月21日51CTO微软MVP聚会照片
  16. 锐捷客户端-您不在许可范围中,请确认您的权限
  17. 系统运维工程师装逼完全指南
  18. idea创建module没有图标显示
  19. 用python做数据处理怎么挣钱_个人利用python爬虫技术怎么挣钱
  20. C语言100题练习计划 07——用字符*输出字母C的图案

热门文章

  1. c++ primer plus6.11第三题 编写一个菜单驱动程序雏形。
  2. finereport与finebi差别_FineBI与FineReport对比
  3. delphi 报错AV调试方法
  4. perl 模块下载安装
  5. 数据可视化Error:matplotlib is required for plotting when the default backend “matplotlib“ is selected
  6. 【String-easy】551. Student Attendance Record I 学生迟到和旷课
  7. 北大计算机科学系 97届,北大一专业:六代单传、一人旷课全系放假,毕业照只有一个人...
  8. 通信芯片sx1278-基于LORA SX1278无线模块的STM32点对点通信简单实现
  9. 打外星人的回合制JAVA游戏_25款最佳太空游戏盘点 带玩家到太空殖民打外星人...
  10. 金仓数据库 KingbaseES 插件参考手册(23. dbms_utility)