工作区和暂存区

转载 2016年08月30日 14:28:08

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

先来看名词解释。

工作区(Working Directory)

就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:
这里写图片描述

版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
这里写图片描述
分支和HEAD的概念我们以后再讲。

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

俗话说,实践出真知。现在,我们再练习一遍,先对readme.txt做个修改,比如加上一行内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.

然后,在工作区新增一个LICENSE文本文件(内容随便写)。

先用git status查看一下状态:

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       LICENSE
no changes added to commit (use "git add" and/or "git commit -a")

Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked。

现在,使用两次命令git add,把readme.txt和LICENSE都添加后,用git status再查看一下:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   LICENSE
#       modified:   readme.txt
#

现在,暂存区的状态就变成这样了:
这里写图片描述

所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

$ git commit -m "understand how stage works"
[master 27c9860] understand how stage works
 2 files changed, 675 insertions(+)
 create mode 100644 LICENSE

一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:

$ git status
# On branch master
nothing to commit (working directory clean)

现在版本库变成了这样,暂存区就没有任何内容了:
这里写图片描述
小结

暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。

没弄明白暂存区是怎么回事的童鞋,请向上滚动页面,再看一次。

【Git】工作区、暂存区与版本库

本篇博文旨在介绍git的工作区,暂存区和版本库的概念;并说明使用git add、git commit 等指令时,对工作区,暂存区以及版本库分别造成的结果; 对于会使用git的人,git add,g...
  • qq_31828515
  • qq_31828515
  • 2017年03月17日 19:40
  • 1071

Git学习3:理解工作区和暂存区

在Git学习过程中,遇到了如下几个概念:工作区、暂存区和版本库。刚开始觉得Git不就是一个版本控制系统嘛,搞这么多概念干嘛。实际上正是这些概念,让Git的版本控制更加便捷和高效。而Git相比其他版本控...
  • u011116672
  • u011116672
  • 2016年04月26日 19:24
  • 3380

git的工作区、暂存区、本地仓库、远程仓库

转载地址:(http://san-yun.iteye.com/blog/2061647) 1、git的工作区:在当前仓库中,新增,更改,删除文件这些动作,都发生在工作区里面。2、git的暂存区:英文...
  • duyiweilan
  • duyiweilan
  • 2017年02月09日 17:16
  • 1308

Git 版本回退/工作区和暂存区

初始化一个Git仓库,使用git init命令。 添加文件到Git仓库,分两步: 第一步,使用命令git add ,注意,可反复多次使用,添加多个文件; 第二步,使用命令git commit,完...
  • qq_26808915
  • qq_26808915
  • 2015年12月19日 00:55
  • 1362

撤销工作区的内容&撤销暂存区的内容

撤销工作区的内容 git checkout -- readme.txt 撤销暂存区的内容 git reset HEAD readme.txt...
  • daijiguo
  • daijiguo
  • 2017年09月29日 08:40
  • 176

Git中工作区与暂存区的区别

随着Github的影响范围不断扩大,对开源着迷的小伙伴越来越多。在使用Git过程中,有不少朋友对Git中工作区与暂存区的概念比较模糊,在此对Git中工作区与暂存区的区别 稍微做一些解释,希望可以为一些...
  • tx_test2611
  • tx_test2611
  • 2015年11月23日 00:34
  • 1110722

Git工作区,暂存区,远程仓库及分支管理

一,Git的工作区与暂存区 Git的工作区(working directory),就像我们平时看到的目录一样。Git的版本库中包含了暂存区(stage或者index)以及Git为我们自动创建的第一个...
  • qq_27656675
  • qq_27656675
  • 2017年05月30日 23:24
  • 849

Git工作区和暂存区介绍

本文详细介绍了Git暂存区的概念,管理修改、撤销修改和删除文件等涉及暂存区概念的操作原理介绍。...
  • shufac
  • shufac
  • 2016年06月25日 18:46
  • 6526

工作区到暂存区到本地仓常用命令

mkdir test cd test git init 初始化本地仓  git add [文件] git status  查看是否有文件未推送到缓存区(no c...
  • u012031380
  • u012031380
  • 2017年12月27日 09:19
  • 37

Git学习(五)----Git工作区&暂存区&版本库(“三巨头”)、删除文件、撤销操作

工作区、暂存区(stage)、版本库 工作区:比如我的就是git1。 版本库:工作区里有个隐藏的.git文件夹,这个奏是Git的版本库 暂存区:Git版本库里一个很重要的部分。           ...
  • u013683780
  • u013683780
  • 2016年04月05日 18:44
  • 2433
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:工作区和暂存区
举报原因:
原因补充:

(最多只允许输入30个字)