基本概念
1、工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的gitstudy文件夹就是一个工作区:

2、本地版本库(Local Repository)
工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index索引)的 暂存区 ,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫 HEAD。
我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。
3、暂存区(stage)
Git暂存区(或称为索引)是Git中一个重要的概念。它是Git版本控制系统中的一个临时区域,用于存储下一次提交时要保存的文件版本。 git add 命令行就是将文件添加到暂存区。
实践一下:
(1)修改一下我们本地的README.md文件
(2)然后,在工作区新增一个123.txt文本文件(内容随便写)
(3)先用git status查看一下状态:
$ git status
On branch develop/0.0.1
Your branch is up to date with 'origin/develop/0.0.1'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
123.txt
no changes added to commit (use "git add" and/or "git commit -a")
Git非常清楚地告诉我们,README.md被修改了,而123.txt还从来没有被添加过,所以它的状态是Untracked。
现在,使用两次命令git add,把README.md和123.txt都添加后,用git status再查看一下:
Admin@DESKTOP-OHV1P7N MINGW64 /d/gitstudy/gitstudy (develop/0.0.1)
$ git add README.md
Admin@DESKTOP-OHV1P7N MINGW64 /d/gitstudy/gitstudy (develop/0.0.1)
$ git add 123.txt
Admin@DESKTOP-OHV1P7N MINGW64 /d/gitstudy/gitstudy (develop/0.0.1)
$ git status
On branch develop/0.0.1
Your branch is up to date with 'origin/develop/0.0.1'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: 123.txt
modified: README.md
现在,暂存区的状态就变成这样了:
所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
Admin@DESKTOP-OHV1P7N MINGW64 /d/gitstudy/gitstudy (develop/0.0.1)
$ git commit -m "了解暂存区工作原理"
[develop/0.0.1 18e2389] 了解暂存区工作原理
2 files changed, 2 insertions(+), 1 deletion(-)
create mode 100644 123.txt
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:
Admin@DESKTOP-OHV1P7N MINGW64 /d/gitstudy/gitstudy (develop/0.0.1)
$ git status
On branch develop/0.0.1
Your branch is ahead of 'origin/develop/0.0.1' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
现在版本库变成了这样,暂存区就没有任何内容了:

4、远程版本库(Remote Repository)
一般指的是 Git 服务器上所对应的仓库,这里我用到的是 gitee 仓库就是一个远程版本库

5、分支
分支是为了将修改记录的整个流程分开存储,让分开的分支不受其它分支的影响,所以在同一个数据库里可以同时进行多个不同的修改
Git把每次的提交记录串成一条时间线,这条时间线就是一个分支。下图展示的是一条时间线,也就是一个分支。
第一次更正展示动画的错误(蓝色线部分),提交到GIT上,就会生成一条记录一个时间点;
第二次添加新功能(紫色线部分),提交到GIT上,再一次生成一条新记录一个新时间点;
第三次添加任务栏(粉色线部分),提交到GIT上,生成一条新记录一个新时间点;

6、主分支(Master)
Git鼓励大量使用分支,master分支(又称主分支)也是用于部署生产环境的分支,确保 master 分支稳定性;master 分支一般由 develop分支(开发分支 )以及 hotfix 分支(修复分支)合并,任何时间都不能直接修改代码。分支命名确保遵循Git 分支开发规范,具体规范后期补充。

7、标签(Tag)
标签是用于标记特定的点或提交的历史,通常会用来标记发布版本的名称或版本号(如:publish/0.0.1),虽然标签看起来有点像分支,但打上标签的提交是固定的,不能随意的改动,参见上图中的1.0 / 2.0 / 3.0
8、HEAD
HEAD 指向的就是当前分支的最新提交。
HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!
工作原理
工作区、暂存区、本地版本库、远程版本库之间几个常用的 Git 操作流程如下图所示:

参考文档:

3246

被折叠的 条评论
为什么被折叠?



