Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251152
  • 博文数量: 11
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 129
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-09 23:45
个人简介

新手上路

文章分类

全部博文(11)

文章存档

2014年(10)

2013年(1)

我的朋友

分类: 项目管理

2014-02-19 16:21:34




图中左侧为工作区,右侧为版本库。在版本库中标记为index的区域为暂存区,标记为master的是master分支所代表的目录树。
图中可以看出, 此时HEAD实际是指向master分支的一个“游标”,所以图示的命令中出现HEAD的地方可以用master来替换。
途中的objects标识的区域为git的对象库,世纪位于 .git/objects目录下。
当对工作区修改(或新增)的文件执行git add命令时,暂存区的目录树会被更新,同时工作区修改(或新增)的文件内容会被写入到对象库中的一个新的对象中,而该对象的id被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树会写到版本库(对象库)中,master分支会做相应的更新,即master最新指向的目录树就是提交时原暂存区的目录树。
当执行git reset HEAD命令时,暂存区的目录树会被重写,会被master分支指向的目录树所替换,但是工作区不受影响。
当执行git rm --cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行git checkout .或git checkout -- 命令是,会用暂存区全部的文件或指定的文件替换工作区的文件。这个操作很危险,会清楚工作区中未添加到暂存区的改动。
当执行git checkout HEAD .或git checkout HEAD 命令时,会用HEAD指向的master分支中的全部或部分文件替换暂存区和工作区中的文件。这个命令也是极度危险的。因为不但会清楚工作区中未提交的改动,也会清楚暂存区中未提交的改动。

ps:摘抄自《git权威指南》

阅读(9259) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

hello_ketty2016-04-20 19:48:48

如果我要将index中的数据回滚到工作区该如何处理呢?