Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
先来看名词解释。
工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learngit
文件夹就是一个工作区:
版本库(Repository)
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
分支和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.txt
和LICENSE
都添加后,用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 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非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。
相关推荐
在Git中,暂存区和工作区的概念也很重要。暂存区是.git文件夹中的Index文件,是临时保存修改文件的地方。工作区是包含.git文件夹的目录,主要用于存放开发的代码。文件在Git工作目录下的状态有未跟踪(untracked)、...
`git status`用于查看当前工作目录和暂存区的状态,了解哪些文件被修改、新增或删除。 10. **撤销更改(Revert Changes)**: 如果需要撤销未提交的更改,可使用`git reset --hard HEAD`;若要回退到某个提交,如...
- 暂存区(Index/Stage):用于临时存放即将提交的更改。 - 仓库:存储项目的元数据和对象数据库。 - **本地库与远程库的交互**: - 克隆:将远程库复制到本地。 - 推送(Push):将本地的提交同步到远程库。 -...
这份"Git的学习笔记/记录"涵盖了Git的基础知识以及高级用法,旨在帮助读者深入理解Git的工作原理和实践技巧。 一、Git的基本概念 1. 版本控制:Git的主要目标是管理项目在开发过程中的不同版本,以便于回溯、比较和...
接着,你将学习如何添加文件到暂存区(Stage),使用`git add`,并提交更改到本地仓库,使用`git commit`。此外,文件的版本回溯和对比也是Git的重要功能,可以通过`git log`和`git diff`来查看。 Git的分支管理是...
添加文件到仓库时,需要先使用git add命令将文件放入暂存区,然后使用git commit命令将暂存区的内容提交到仓库。版本回退则是通过git reset命令来实现,可以使用不同的参数来回退到历史的不同状态。 远程仓库是存放...
Git采用分布式架构,核心概念包括工作区域、暂存区和版本库。工作区域是用户直接操作的地方,暂存区用于临时保存更改,版本库则记录所有历史版本。 五、Git初始化及仓库操作 1. 设置基本信息:使用`git config`命令...
- `git rm [--cached] [-r] [filename]`:从暂存区或工作目录中移除文件 - **移动文件**: - `git mv README.md README`:相当于先移动文件再添加到暂存区,再从暂存区移除原文件。 - **历史记录**: - `git ...
本地库主要负责个人的工作区、暂存区和本地版本控制,而远程库则用于团队成员之间的共享和协作。 初始化本地仓库是使用Git的第一步。这通常涉及创建一个文件夹,然后在Git Bash中进入该文件夹并设置字体、编码。你...
3. 基本操作:`git add`用于将文件添加到暂存区,`git commit`用来保存暂存区的更改,`git status`查看当前状态,`git log`显示提交历史,`git diff`比较文件差异。 4. 分支管理:`git branch`用于列出、创建或删除...
- 使用`git reset HEAD <filename>`命令撤销暂存区的修改,并将修改重新放回工作区。 - 使用`git checkout -- <filename>`命令丢弃工作区的修改,让文件回到最近一次提交或添加的状态。 6. **删除文件** - 场景...
`git commit`将暂存区的改动保存为一个新的提交,`git status`查看当前仓库的状态,`git branch`管理分支,`git merge`进行分支合并,`git clone`用于克隆远程仓库到本地,`git pull`和`git push`分别用于从远程仓库...
`git status` 命令用于检查当前仓库的状态,查看是否有未添加到暂存区或未提交的改动。`git log` 显示提交历史,而 `git log --oneline` 显示简洁的一行式历史记录。 Git 的版本回退功能非常强大。`git reset --...
`git status`命令用来检查当前工作区的状态,显示哪些文件已被修改,哪些文件尚未被添加到暂存区,以及上次提交以来的变动。 6. **分支(Branches)**: Git的分支机制允许你同时处理多个不同的开发线。通过`git ...
6. **查看状态**:`git status`用于查看当前工作目录和暂存区的状态,了解哪些文件已被修改或待添加。 7. **添加新文件/文件夹**:`git add`可以添加单个文件或整个文件夹,如`git add images`。 8. **查看历史...
标题“starter:这是我的git和github学习库”表明这个压缩包包含了与Git和GitHub学习相关的资源。这可能包括教程、示例代码、笔记或者实践项目的源码。"起动机"暗示这是一个入门或起点,适合初学者了解和掌握这两个...
5. **查看状态**: `git status`命令用来检查当前工作目录的状态,哪些文件被追踪,哪些文件被修改,哪些文件在暂存区。 6. **提交更改**: `git commit -m "Commit message"`将暂存区中的更改保存到本地仓库。消息应...