• Git 的暂存区(staging area)理解


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

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

    举个例子吧:

    1. $ git status
    2.   On branch master
    3.   Changed but not updated:
    4.     (use "git add ..." to update what will be committed)
    5.       modified:   README.md
    6.       modified:   about.html
    7.   Untracked files:
    8.     (use "git add ..." to include in what will be committed)
    9.       help.txt
    10.   no changes added to commit (use "git add" and/or "git commit -a")

    我们修改了README.md 和about.html两个文件,并且添加了help.txt文件,当执行git status命令时,git告诉我们可以执行git add命令将修改添加到暂存区中。

    1. $ git add .
    2. $ git status
    3.   On branch master
    4.   Changes to be committed:
    5.     (use "git reset HEAD ..." to unstage)
    6.       modified:   README.md
    7.       modified:   about.html
    8.       new file:   help.txt

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

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

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

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

     

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

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

     

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

    • git diff 不加参数,比较的是工作区和暂存区的数据。
    • git diff --cached 比较的是暂存区和版本库中的数据
    • git diff HEAD/master 比较的是版本库和工作区的数据

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

  • 相关阅读:
    十分钟搞懂基-2 FFT原理及编程思想
    网络安全—综合渗透测试-CVE-2010-2883-PDF漏洞分析
    数据结构:选择题+编程题(每日一练)
    linux进阶55——service文件
    目前最流行的无人机摄影测量软件有哪些?各有什么特点?
    在FreeSQL中实现「触发器」和软删除功能
    pytest+requests+allure自动化测试接入Jenkins学习
    k8s1.25版本集群部署(亲测有效)
    跟着感觉走 threejs 第一篇
    【心得】来聊聊令人头疼的前端内存泄漏~
  • 原文地址:https://blog.csdn.net/weixin_44259233/article/details/126145399