• 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的面纱。

  • 相关阅读:
    AM@麦克劳林公式逼近以及误差分析
    C#学习系列之继承
    mysql json数据类型 相关函数
    vue和react的相同点和不同点
    推荐2款开源、美观的WinForm UI控件库
    Java中的网络编程如何理解——精简
    PMI-ACP练习题(30)
    c++中类的继承与多态
    分布式唯一Id,它比GUID好
    显示支付结果_WebSocket实现_方案2
  • 原文地址:https://blog.csdn.net/weixin_44259233/article/details/126145399