Git权威指南学习笔记(二)Git暂存区[通俗易懂]

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

大家好,又见面了,我是全栈君。

例如以下图所看到的:

左側为工作区,是我们的工作文件夹。

右側为版本号库,当中:

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

master标记的是master分支所代表的文件夹树。HEAD指向master分支。

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

Git权威指南学习笔记(二)Git暂存区[通俗易懂]


通过该图我们能够清晰地看出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命令。输出例如以下:

Git权威指南学习笔记(二)Git暂存区[通俗易懂]

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

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

3.在welcome.txt文件里加入第三行”3 Hello Git”。不运行git add命令。

输入git status -s。输出例如以下:

Git权威指南学习笔记(二)Git暂存区[通俗易懂]

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


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116323.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一个一个添加好友太麻烦,教你全自动添加好友

    一个一个添加好友太麻烦,教你全自动添加好友

    2021年9月17日
    120
  • Codeforces 451E Devu and Flowers(容斥原理)

    Codeforces 451E Devu and Flowers(容斥原理)

    2022年1月12日
    45
  • lwip tcp_lwip udp发送

    lwip tcp_lwip udp发送欢迎查看本文所在的系列,STM32的LWIP应用,点击跳转1、tcp_arg()该函数用于传递给应用程序的具体状态,在控制块标志建立以后调用,即在函数tcp_new()调用之后才能调用功能指定应该传递给所有回调函数的应用程序的具体状态原型voidtcp_arg(structtcp_pcb*pcb,void*arg)参数pcb:当前TCP连接的控制块arg:需要传递给回调…

    2025年7月16日
    7
  • maven配置环境变量失败解决办法

    maven配置环境变量失败解决办法配置maven路径什么的统统正确,最后测hi不成功。在网上搜索了好多资料方法都解不了具体问题具体对待吧,如果有和我类似的小伙伴,可以尝试一下我的这个办法,在maven路径后面加/binpath变量中测试输入mva-v(中间有个空格)成功!如果还是不能解决也可以参这个https://blog.csdn.net/xudaliang_…

    2022年7月25日
    22
  • 程序员为什么不喜欢去做外包_外包程序员的出路

    程序员为什么不喜欢去做外包_外包程序员的出路做IT的一定对于外包公司很熟悉,就算没做过,想必也是经常听说,说实话在行业内是存在鄙视链的,而外包公司往往在最低端。很多人都在四处问:“软件外包公司到底能不能去”?到底能不能学到真正的技术?我来为大家详细梳理一下这个问题。想要知道外包公司到底值不值得去,我们就应该了解外包公司的概念是什么?不仅仅是IT行业有软件外包公司,在很多行业中,外包公司的数量也都是最多的。外包的工作形式分为两种:‍外包公司承接甲方的项目,了解需求后拿回自己的公司做项目,程序员按照客户的需求把代码写好,最终完成项目,外包

    2022年9月26日
    2
  • maven私库nexus2.14.1迁移到nexus3.1

    maven私库nexus2.14.1迁移到nexus3.1maven私库nexus2.14.1迁移到nexus3.1(含安装教程),亲测可用

    2022年7月18日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号