Git权威指南学习笔记(二)Git暂存区

如下图所示:

左侧为工作区,是我们的工作目录。

右侧为版本库,其中:

index标记的是暂存区(stage),所处目录为.git/index,记录了文件的状态和变更信息。

master标记的是master分支所代表的目录树。HEAD指向master分支。

objects标记的是Git的对象库,所处目录为.git/objects,文件索引建立了文件和对象库中对象实体之间的映射关系。

通过该图我们可以清晰地看出add,commit等命令的转化关系。下面通过git diff和git status两条命令来理清它们之间的关系。

1.假设welcome.txt文件为空,我们首先在该文件中加入一行"1 Hello",并通过git add和git commit提交到版本库中:

$ git add welcome.txt
$ git commit -m "1 Hello"

2.在welcome.txt文件中添加第二行"2 Git",只执行git add命令,不执行git commit:

$ git add welcome.txt

执行git status -s命令,输出如下:

可以看到第一列的M是绿色的,表示对于welcome.txt文件,master分支中的文件和暂存区中的文件内容不一致。

第二列的M不存在,表示对于welcome.txt文件,工作区中的文件和暂存区中的文件一致,明显是因为执行了git add操作使得工作区和暂存区中的文件内容同步。

3.在welcome.txt文件中添加第三行"3 Hello Git",不执行git add命令。

输入git status -s,输出如下:

可以看到多了第二列的M,而且是红色的,表示对于welcome.txt文件,工作区中的文件和暂存区中的文件内容不一致。

4.Git diff魔法

(1)暂存区和工作区比较:git diff

$ git diff
diff --git a/welcome.txt b/welcome.txt
index 671036a..d6a88bb 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1,2 +1,3 @@
 1 Hello
-2 Git
\ No newline at end of file
+2 Git
+3 Hello Git
\ No newline at end of file

(2)HEAD和暂存区比较:git diff --cached

$ git diff --cached
diff --git a/welcome.txt b/welcome.txt
index f6abfb2..671036a 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1 +1,2 @@
-1 Hello
\ No newline at end of file
+1 Hello
+2 Git
\ No newline at end of file

(3)HEAD和工作区比较:git diff HEAD

$ git diff HEAD
diff --git a/welcome.txt b/welcome.txt
index f6abfb2..d6a88bb 100644
--- a/welcome.txt
+++ b/welcome.txt
@@ -1 +1,3 @@
-1 Hello
\ No newline at end of file
+1 Hello
+2 Git
+3 Hello Git
\ No newline at end of file

结合上面的图来看就不难理解了。

最后,给出原书作者的忠告:不要使用git commit -a,原因是这会让我们失去对提交内容进行控制的能力。

Git权威指南学习笔记(二)Git暂存区,布布扣,bubuko.com

时间: 2024-10-21 02:12:46

Git权威指南学习笔记(二)Git暂存区的相关文章

Git权威指南学习笔记(一)Git初始化

1.在Git中配置用户名和邮件地址 $ git config --global user.name "Jymn_Chen" $ git config --global user.email "[email protected]" 注意把用户名和邮件地址替换成你自己的资料. 在这里的参数global表示配置的作用范围是当前用户,如果将参数改为system,那么配置的作用范围是系统中的所有用户. 2.创建版本库 新建一个目录并cd到目录中,执行以下命令: $ git i

Hadoop权威指南学习笔记二

MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my_acm 上一篇介绍了什么是Hadoop.Hadoop的作用等.本篇相同基于Hadoop权威指南,结合迪伦的Hadoop的视频教程对MapReduce做一个介绍. 1. MapReduce是Hadoop的核心之中的一个.MapReduce分为两个部分,Mapper和Ruducer模块.简单

《Git小书》笔记:4 暂存区

这节讲了暂存区,我觉得讲的很好啊, 之前一起奇怪暂存区怎么用来的. 还用之前的比喻吧. 暂存区就好比侦探的那个相机嘛,暂存区的本质其实不是用来暂存的,如果说用来暂存的,至少会引起误解,因为我们会说为什么要暂存呢?直接存不就好了,为啥多此一举.的确,如果某种情况你要直接存当然不需要暂存区了. 但是暂存的是什么?暂存的是文件吗?正如那个侦探拍摄到的嫌疑人,他拍摄的是整个人吗?不是,他拍摄的一个行为.同理,暂存区暂存的是什么?暂存的是修改而非文件,我们要用改动的眼光看待文件,一个文件从诞生伊始,空无一

MongoDB权威指南学习笔记5---索引相关的知识点

1 查看查询计划 db.user.find({"username":"xxx"}) .explain() db.doc.find({"es_y":"2014"}).explain() {  "cursor" : "BasicCursor",  "isMultiKey" : false,  "n" : 0,  "nscannedObject

JavaScript权威指南学习笔记之一

1.关于分号 javascript里面不强制使用分号来表示一行语句的结束,但是最好能够在写js之前,特别是在原有的js上面新增时,最好前置一个分号.避免这种情况发生:  2.JavaScript类型转换 3.关于=== ①如果类型不同则不等 ②null===null或undefined===undefined ③true===true或false===false ④NaN不等 ⑤0===0 0===-0 ⑥如果是同一个object,array,function则相等 4.关于== ①如果已经==

MongoDB权威指南学习笔记4---查询相关的知识点

1 find find({查询条件},{"key":1,"email":1})  后面表示返回哪些键 2 可用的比较操作符 $lt , $lte,$gt,$gte 比如db.users.find({"age":{"$gte":18,"$lte":30}}) 3不等于 find(...{"key":{"$ne":"value"}} 4 in find

Hadoop权威指南学习笔记一

Hadoop权威指南学习笔记一 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习参考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my_acm 1. 数据的增长远远超过了磁盘的读取速度,传统的数据存储方式和分析方式变得不再适用于大数据的处理. Hadoop分为两大核心技术,HDFS(HadoopDistributed File System-分布式hadoop文件处理系统)和MapReduce(分为Map-数据映射等

sencha touch权威指南---学习笔记5-经纬度获取计算直线距离

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta charset="utf-8" />    <title></title>    <link rel="stylesheet" href="sdk-touch/resources/css/sencha-touch.

Git 工作区、版本库中的暂存区和版本库之间的关系

下图展示了 工作区.版本库中的暂存区和版本库之间的关系: 1. 理解 Git 暂存区 (stage) 在版本库 .git 目录下有一个 index 文件,下面针对这个文件做一个有趣的试验.要说明的是:这个试验用 1.7.3 版本的 Git 进行的,低版本的 Git 因为没有针对 git status 命令进行优化设计,需要运行 git diff 命令才能看到 index 文件的日期戳变化,具体操作步骤如下. (1) 首先执行 git checkout 命令(后面会介绍此命令),撤销工作区中 we