`
wangemperor
  • 浏览: 40193 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

github学习笔记(五)工作区和暂存区

 
阅读更多

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

先来看名词解释。

工作区(Working Directory)

就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:

working-dir

版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

git-repo

分支和HEAD的概念我们以后再讲。

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

俗话说,实践出真知。现在,我们再练习一遍,先对readme.txt做个修改,比如加上一行内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.

然后,在工作区新增一个LICENSE文本文件(内容随便写)。

先用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.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       LICENSE
no changes added to commit (use "git add" and/or "git commit -a")

Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked

现在,使用两次命令git add,把readme.txtLICENSE都添加后,用git status再查看一下:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   LICENSE
#       modified:   readme.txt
#

现在,暂存区的状态就变成这样了:

git-stage

所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

$ git commit -m "understand how stage works"
[master 27c9860] understand how stage works
 2 files changed, 675 insertions(+)
 create mode 100644 LICENSE

一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:

$ git status
# On branch master
nothing to commit (working directory clean)

现在版本库变成了这样,暂存区就没有任何内容了:

git-stage-after-commit

小结

暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。

分享到:
评论

相关推荐

    Github小白学习笔记.pdf

    在Git中,暂存区和工作区的概念也很重要。暂存区是.git文件夹中的Index文件,是临时保存修改文件的地方。工作区是包含.git文件夹的目录,主要用于存放开发的代码。文件在Git工作目录下的状态有未跟踪(untracked)、...

    GitHub命令行笔记

    `git status`用于查看当前工作目录和暂存区的状态,了解哪些文件被修改、新增或删除。 10. **撤销更改(Revert Changes)**: 如果需要撤销未提交的更改,可使用`git reset --hard HEAD`;若要回退到某个提交,如...

    2018尚硅谷Git和GitHub视频教程

    - 暂存区(Index/Stage):用于临时存放即将提交的更改。 - 仓库:存储项目的元数据和对象数据库。 - **本地库与远程库的交互**: - 克隆:将远程库复制到本地。 - 推送(Push):将本地的提交同步到远程库。 -...

    Git的学习笔记/记录

    这份"Git的学习笔记/记录"涵盖了Git的基础知识以及高级用法,旨在帮助读者深入理解Git的工作原理和实践技巧。 一、Git的基本概念 1. 版本控制:Git的主要目标是管理项目在开发过程中的不同版本,以便于回溯、比较和...

    czbk公开课笔记git 两小时学会Git玩转Github.zip

    接着,你将学习如何添加文件到暂存区(Stage),使用`git add`,并提交更改到本地仓库,使用`git commit`。此外,文件的版本回溯和对比也是Git的重要功能,可以通过`git log`和`git diff`来查看。 Git的分支管理是...

    Git学习笔记.pdf

    添加文件到仓库时,需要先使用git add命令将文件放入暂存区,然后使用git commit命令将暂存区的内容提交到仓库。版本回退则是通过git reset命令来实现,可以使用不同的参数来回退到历史的不同状态。 远程仓库是存放...

    git.docx学习心得笔记

    Git采用分布式架构,核心概念包括工作区域、暂存区和版本库。工作区域是用户直接操作的地方,暂存区用于临时保存更改,版本库则记录所有历史版本。 五、Git初始化及仓库操作 1. 设置基本信息:使用`git config`命令...

    git学习笔记,一看就会

    - `git rm [--cached] [-r] [filename]`:从暂存区或工作目录中移除文件 - **移动文件**: - `git mv README.md README`:相当于先移动文件再添加到暂存区,再从暂存区移除原文件。 - **历史记录**: - `git ...

    Git常用命令指导教程笔记.pdf

    本地库主要负责个人的工作区、暂存区和本地版本控制,而远程库则用于团队成员之间的共享和协作。 初始化本地仓库是使用Git的第一步。这通常涉及创建一个文件夹,然后在Git Bash中进入该文件夹并设置字体、编码。你...

    git-notes:Git和GitHub笔记

    3. 基本操作:`git add`用于将文件添加到暂存区,`git commit`用来保存暂存区的更改,`git status`查看当前状态,`git log`显示提交历史,`git diff`比较文件差异。 4. 分支管理:`git branch`用于列出、创建或删除...

    git学习笔记

    - 使用`git reset HEAD &lt;filename&gt;`命令撤销暂存区的修改,并将修改重新放回工作区。 - 使用`git checkout -- &lt;filename&gt;`命令丢弃工作区的修改,让文件回到最近一次提交或添加的状态。 6. **删除文件** - 场景...

    Git学习笔记

    `git commit`将暂存区的改动保存为一个新的提交,`git status`查看当前仓库的状态,`git branch`管理分支,`git merge`进行分支合并,`git clone`用于克隆远程仓库到本地,`git pull`和`git push`分别用于从远程仓库...

    git学习笔记.docx

    `git status` 命令用于检查当前仓库的状态,查看是否有未添加到暂存区或未提交的改动。`git log` 显示提交历史,而 `git log --oneline` 显示简洁的一行式历史记录。 Git 的版本回退功能非常强大。`git reset --...

    git相关学习笔记值得

    `git status`命令用来检查当前工作区的状态,显示哪些文件已被修改,哪些文件尚未被添加到暂存区,以及上次提交以来的变动。 6. **分支(Branches)**: Git的分支机制允许你同时处理多个不同的开发线。通过`git ...

    20210324_231823_1_搭建博客可能会用到的Git命令|学习笔记1

    6. **查看状态**:`git status`用于查看当前工作目录和暂存区的状态,了解哪些文件已被修改或待添加。 7. **添加新文件/文件夹**:`git add`可以添加单个文件或整个文件夹,如`git add images`。 8. **查看历史...

    starter:这是我的git和github学习库

    标题“starter:这是我的git和github学习库”表明这个压缩包包含了与Git和GitHub学习相关的资源。这可能包括教程、示例代码、笔记或者实践项目的源码。"起动机"暗示这是一个入门或起点,适合初学者了解和掌握这两个...

    git入门学习实验笔记

    5. **查看状态**: `git status`命令用来检查当前工作目录的状态,哪些文件被追踪,哪些文件被修改,哪些文件在暂存区。 6. **提交更改**: `git commit -m "Commit message"`将暂存区中的更改保存到本地仓库。消息应...

Global site tag (gtag.js) - Google Analytics