Git的工作原理

基本概念

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严格来说不是指向提交,而是指向mastermaster才是指向提交的,所以,HEAD指向的就是当前分支。

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!

工作原理

工作区暂存区本地版本库远程版本库之间几个常用的 Git 操作流程如下图所示:

参考文档:

工作区和暂存区 - Git教程 - 廖雪峰的官方网站 

创建与合并分支 - Git教程 - 廖雪峰的官方网站 

Git 从入坑到放不下-腾讯云开发者社区-腾讯云 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值