Git 的暂存区(staging area)理解

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

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

举个例子吧:

$ git status
  On branch master
  Changed but not updated:
    (use "git add <file>..." to update what will be committed)
 
      modified:   README.md
      modified:   about.html
 
  Untracked files:
    (use "git add <file>..." to include in what will be committed)
 
      help.txt
  no 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 status
  On branch master
  Changes to be committed:
    (use "git reset HEAD <file>..." to unstage)
 
      modified:   README.md
      modified:   about.html
      new file:   help.txt

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

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

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

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

  

114101_zGrN_258230.png


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

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

114800_hoP9_258230.png

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

  • git diff 不加参数,比较的是工作区和暂存区的数据。

  • git diff --cached 比较的是暂存区和版本库中的数据

  • git diff HEAD/master 比较的是版本库和工作区的数据


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

注:图片来自 机械工业出版社 蒋鑫著《Git权威指南》一书。

转载于:https://my.oschina.net/HeliosFly/blog/215398

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值