一、Git 工作区域

image-20230727104740851

1、工作区(Workspace)

工作区:就是你在电脑里能看到的目录,即进行开发改动的地方,内容也是最新的。也就是本地项目路径的文件。

说明:任何对象都是在工作区中诞生和被修改;

image-20230727115045685

2、暂存区(Index/Stage)

暂存区:位于 .git 目录下的 index 文件,暂存区会记录 git add 添加文件的相关信息(文件名、大小),不保存文件实体,通过 id 指向每个文件的实体。可以使用git status查看暂存区的状态。

说明:任何修改都是从进入暂存区才开始被版本控制;

image-20230727115316370

3、本地仓库(Repository)

本地仓库:位于自己的机器,就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。工作区有一个隐藏目录 .git,就是 Git 的版本库。git commit 后同步 index 的目录树到本地仓库,方便从下一步通过 git push 同步本地仓库与远程仓库。

说明1:只有把修改提交到本地仓库,该修改才能在仓库中留下痕迹;

说明2:可以在任何地方新建本地仓库,只需要在目标目录下执行 “git init” 指令,就会将此目录自动初始化为本地仓库,同时它会新建".git"目录。

4、远程仓库(Remote)

远程仓库:托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。

说明1:与协作者分享本地的修改,可以把它们push到远程仓库来共享。

说明2:常用的远程仓库有 GitHub 、Gitlab 和 gitee 等;

二、 Git 开发流程

image-20230727104702801

3、Git 分支

几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。

使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

下面就来介绍一种应对中小型项目git分支管理最佳实践 – Git flow

pic_router

1、常见分支

Master 分支

主分支,项目初始点由这个分支发起,后续该分支作为项目版本标记分支,可以理解为备份分支,从这里可以追溯项目发布所有版本。可以从该分支拉起任意项目版本,并能平稳运行。注意:Master分支不允许程序员在此写代码。

Develop 分支

开发分支,初始时居于Master分支创建,团队所有开发代码集中合并的分支。另外,Develop分支维护项目最新代码。

Feature 分支

功能分支,基于Develop分支创建的新分支,用于新功能/新模块的开发。当开发完成之后,需要合并回到Develop分支。这分支是程序员独属分支,不存与团队源码库。

Release 分支

当你需要一个发布一个新版本时,基于Develop分支创建一个Release分支。此时需要注意,属于该版本的所有Feature分支需要合并到Develop分支。Release分支创建成功后,对该版本进行测试,改bug,完成后,需要将代码合并到Master和Develop分支。合并到Master分支,会对Master打上标签,表示一个新的版本。合并到Develop分支,需要注意,其他非该版本的Feature分支再没有完成Release分支发布前,不允许合并会Develop分支。

Hotfix 分支

当项目上线后,运行发现新的Bug时候,则需要基于Master创建一个 Hotfix, 完成 Hotfix 后,我们合并回 Master 和 Develop 分支,所以 Hotfix 的改动会进入下一个Release 版本。

2、开发案例

步骤1:项目立项后,项目经理初始化好项目,创建Master分支,同时基于Master分支创建Develop分支。

image-20230727144111064

步骤2:项目要新增功能A,需要分2步实现:功能A1,功能A2。

image-20230727144154187

程序员小明基于Develop分支创建小明Feature分支,完成功能A1, 功能A2 步骤,开发完成后,合并到Develop分支,此时功Develop分支拥有功能A。

步骤3:同时期,项目想尝试创新,尝试实现功能B。

image-20230727144241409

程序员小红基于Develop分支创建小红Feature分支,尝试实现功能B。

步骤4:功能A需要紧急上线发布,此时功能B暂缓。

image-20230727144516319

1> 完成功能A之后,合并到Develop中

2> 功能A要上线,在Develop基础上创建Release分支,在该分支完成测试/调试/改bug

3> 确认完成之后,将Release分支代码合并到Develop分支,合并到Master分支,标记Tag2

4> 在Release合并回Develop分支之前,不允许新的Feature分支合并回Develop。

5> 当合并到Master跟Develop分支后,可删可不删。

步骤5:功能B开发完成,需要发布。
image-20230727144553776

步骤6:功能AB(Tag3版本)上线之后 ,出bug需要修复。

image-20230727144655334

1> 当出现bug之后,基于Master分支创建Hotfit分支

2> 在Hotfit分支完成bug修改,测试通过后,将代码合并到Master分支,打上标签Tag3.1

3> 在Hotfit分支完成bug修改,测试通过后,将代码合并到Develop分支,保证Develop分支代码最新。

最后完整版
git_flow

参考文档

🚀一种优雅的Git分支实践