通常在很多传统集中式版本控制系统中,只有两个空间用来管理你的数据,一个是你的working copy(工作区),另一个便是 datastore(版本库),然而在Git中,引入了staging area(index)这一概念,我们可以把它看做一个“码头”,你来决定其中的哪些改变可以被“运走”。

有了暂存区,我们的工作区边和Git库就不再直接挂钩了,这样我们可以更加灵活的控制我们的数据了,对暂存区的操作非常的简单,git add可以将你工作区的文件添加到暂存区中,git commit 可以将暂存区中的文件提交到版本库中。

举个例子吧:

$ git statusOn branch masterChanged but not updated:(use "git add <file>..." to update what will be committed)modified:   README.mdmodified:   about.htmlUntracked files:(use "git add <file>..." to include in what will be committed)help.txtno changes added to commit (use "git add" and/or "git commit -a")

我们修改了README.md 和about.html两个文件,并且添加了help.txt文件,当执行git status命令时,git告诉我们可以执行git add命令将修改添加到暂存区中。

$ git add .$ git statusOn branch masterChanges to be committed:(use "git reset HEAD <file>..." to unstage)modified:   README.mdmodified:   about.htmlnew file:   help.txt

当我们执行git add . 后,再执行git status, git又提示我们可以执行git reset HEAD <file>放弃添加,或者git commit 将暂存区的数据提交到版本库中。

$ git commit -m "Adding stuff"Created commit e793200: Adding stuff2 files changed, 3 insertions(+), 0 deletions(-)create mode 100644 help.txt

这样我们就将暂存区中的数据提交到了版本库中,Git告诉我们有两个文件被修改了,插入了三行数据,添加了一个文件。

以上便是最基本的Git操作了,那到底什么是暂存区呢?我们来看个图片可能更直观

我们看到图片大致分成了三个区域:工作区,index,master。目前我们便可以把它们分别理解为工作区,暂存区,和版本库了。

可以看到add 操作将工作区数据添加到了暂存区,commit操作则提交到了版本库中,而reset HEAD是用版本库中最新提交的目录树来重置暂存区的目录树。

另外在我们执行git diff操作时后面添加不同的参数,会得到不同的结果,这是因为比较的两个对象可能不相同,如:

  • git diff 不加参数,比较的是工作区和暂存区的数据。
  • git diff --cached 比较的是暂存区和版本库中的数据
  • git diff HEAD/master 比较的是版本库和工作区的数据

这里只是大致的说明了下暂存区的一点点理解,至于暂存区给我们带来的好处和强大还有很多,让我们慢慢解开Git的面纱。

Git 的暂存区(staging area)理解相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. linux 自定义外壳,管道在自定义的linux外壳
  2. OpenCL异构并行计算编程笔记(1):平台、设备与上下文
  3. 虚拟主机传奇服务器,虚拟主机市场迅猛发展 演绎网络产品传奇
  4. linux正则表达式_号称“天书”的正则表达式,要这么来讲,我小学三年级已经满分了
  5. mysql中序列的使用,在MySQL中使用序列的简单教程
  6. Project Management - 3) Manage Your Meetings
  7. 2017年中国大功率UPS市场需求、市场需求及市场结构占比分析预测
  8. pyDes vs pycrypto
  9. Django登陆以后重定向到请求登陆的页面
  10. 如何用css显示一个图片中多个小图标
  11. 一个很方便使用十六进制的颜色值的宏
  12. 后端要学MySQL_后端程序员需要掌握MySQL数据库吗
  13. 以后华为鸿蒙也要越狱了,玩机福音:华为 EMUI 升级鸿蒙之后依然可使用太极运行 Xposed...
  14. zabbix3.2短信告警脚本
  15. kibana6.0版本汉化工具
  16. java设置隐式事务_隐式事务 - -Timothy- - 博客园
  17. VSCode插件之Beautify
  18. 厦门信息计算机专业录取分数,厦门大学计算机类专业2016年在福建理科高考录取最低分数线...
  19. mysql的填充因子
  20. 【Hotel TV】三星商用TV解决方案

热门文章

  1. 2018腾讯秋招笔试题
  2. 【PC工具】压缩包密码破解工具,暴力破解压缩包密码,zip密码获取
  3. Android studio 中的AVD manger启动失败原因解决方法
  4. 小程序在线客服完整实现
  5. 信息传输速率与传信率_数据、信号、码元传输速率和信息传输速率等概念
  6. Java实现增删改查系统代码(全~纯干货)
  7. FreeRTOS个人笔记-初谈CM3内核
  8. python _foo __foo
  9. 你了解CNAS认证吗?
  10. Flash应用之百宝箱