美文网首页
Git笔记(三)暂存区的理解

Git笔记(三)暂存区的理解

作者: 红发_SHANKS | 来源:发表于2018-07-11 13:57 被阅读18次

git 和 svn 之间的区别就是多了一个暂存区,这个暂存区允许我们多次添加文件,然后在提交快照的时候,一次 commit 到本地仓库。

通过命令行来演示一次加深印象。

在我们的本地仓库文件夹 GitLearn 中添加 一个 hi.txt,并且修改 README.md 文件。然后调用命令行 git status 查看当前状态。

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   README.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        hi.txt

no changes added to commit (use "git add" and/or "git commit -a")

因为我们修改了 README.md 文件而没有 add 到暂存区,所以 git 提示我们,Changes not staged for commit: modified: README.md,我们修改过的文件 README.md 没有 提交到暂存区,并且其实我们可以使用 git add 命令。

我们新增的 hi.txt 文件从来没有添加到暂存区过,所以 git 提示我们 Untracked files: hi.txt

接下来我们执行git add 命令将修改和新增文件添加到暂存区,然后使用git status 看看状态有什么变化。

$ git add .
$ git status

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   README.md
        new file:   hi.txt

这一次告诉我们,需要commit,而不再提示有未添加的新文件和未提交的修改了。接着调用 git commit命令行 看看状态有什么变化。

$ git commit -m "add new file and change README"
[master 39b16df] add new file and change README
 2 files changed, 3 insertions(+), 1 deletion(-)
 create mode 100644 hi.txt
$ git status
On branch master
nothing to commit, working tree clean

这次提示我们没有什么需要提交的快照,工作区很干净。这时候暂存区就没有什么内容了。

很多人说,git 之所以比 svn 优秀,就是因为有暂存区的存在。而 git 跟踪的就是我们对文件的修改而非文件自身。我们新增、修改、删除文件,这都是算对文件的修改。我们实操验证一下这个结论:

第一步,我们修改 README 文件
第二步,add 修改到暂存区
第三步,再次修改 README 文件
第四步,commit 提交快照到本地仓库
第五步,git status 查看当前状态

如果上述流程走完,我们第二次对 README文件的修改提交到了仓库,那么说明 git 管理的是文件自身;如果我们第二次对文件的修改是在工作区还没有提交到暂存区,那么就说明 git 管理的是对文件的修改,而非文件自身。

// 修改README,然后执行 add 操作

$ git add .

// 再次修改 README ,然后执行 commit 操作

$ git commit -m "提交修改"
[master bab594b] 提交修改
 1 file changed, 4 insertions(+), 1 deletion(-)

// 查看状态
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")


从命令行运行结果中我们看到,我们的第二次修改,并没有被提交到仓库,git 依然提示我们 README 文件有被修改,但是没有提交到暂存区。

这个结果,验证了我们的结论,那就是:git 管理的是对文件的修改,而非管理文件的内容

总结:
整个流程下来我们知道:日常工作中,我们在工作区编写代码,新增文件和修改文件都会被 git 跟踪到,我们 add 的时候,是将文件首先提交到暂存区,然后 commit 的时候才是将快照提交到 本地仓库,这期间,工作区是否有文件没有提交到暂存区和暂存区是否有文件没有提交到仓库,git 都会帮助我们跟踪。

git 跟踪的并不是我们的文件本身,而是跟踪的我们的修改。

相关文章

  • git 常用的命令学习整理

    git 可理解为有三个区:本地 暂存区 远程仓库 git add . 将代码提交至暂存区,git则开始追踪...

  • Git笔记(三)暂存区的理解

    git 和 svn 之间的区别就是多了一个暂存区,这个暂存区允许我们多次添加文件,然后在提交快照的时候,一次 co...

  • pro git读书笔记

    pro git读书笔记 起步 三种区域以及三种状态 Git 项目有三个工作区域的概念:工作目录,暂存区域以及Git...

  • Git 命令行的使用

    简单理解基础概念 工作区:你的工作目录 暂存区:git add 之后 本地版本库:git commit 之后 远程...

  • Git相关使用

    一、git中的三个区 : 工作区、暂存区、Git仓库 二、git中的三种状态 : 已修改 (modified):...

  • sql

    Git 作用git config --list三个区域:工作区,暂存区,本地仓库git initgit clone...

  • git干货系列:(二)深入学习之前先理解git暂存区

    前言 暂存区(stage, index)是Git最重要的概念之一,理解了这个概念很多 Git 命令就不再那么神秘了...

  • 浅析git底层存储原理 2021-07-14

    git三区 git三大区:工作区、暂存区和git版本库 1.git版本库 先从git版本库说起,git版本库对应....

  • git 暂存区

    前言 暂存区(stage, index)是Git最重要的概念之一,理解了这个概念很多Git命令就不再那么神秘了。下...

  • 【git学习一】git add,commit的几个命令

    命令 git add 将文件添加到暂存区 git commit 将暂存区的内容提交到(本地)分支 工作区、暂存区和...

网友评论

      本文标题:Git笔记(三)暂存区的理解

      本文链接:https://www.haomeiwen.com/subject/aadhpftx.html