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,原因是这会让我们失去对提交内容进行控制的能力。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值