Git理论基础

本文最后更新于:4 个月前

Git在本地是如何工作的,常见的Git工作流,fork和branch的区别

Git理论基础

img

一、Git工作机制

Git在本地的工作机制如下图,一共分为3个区:

img

  • 工作区:对应实际的文件夹,也称为工作树
  • 暂存区:在数据库和工作树之间有索引,索引是为了向数据库提交作准备的区域
  • 仓库:本质是一个数据库,但是里面保存的不是工作树的内容,而是保存中间索引的状态

二、Git工作流程

作为代码版本管理系统,不可避免涉及多人协作,而协作必须要有一个规范的工作流程,才能有效地进行合作。下面介绍的是3种广泛被使用的工作流程。

  • Git flow
  • GitHub flow
  • GitLab flow

三者共同点:「功能驱动型开发」,即:以 功能/bug修复 为开发起点,以 功能分支(feature branch)/补丁分支(fix branch)为载体,完成开发后,合并入主分支。

2.1、Git flow

img

  • 2个长期分支:master主分支、develop开发分支
  • 3个短期分支:feature功能分支、fix补丁分支、release预发布分支
  • “版本发布”的管理模式,一段时间发布一个版本
  • 缺点:维护麻烦,需要不停切换主分支、开发分支并分别维护
  • 优点:清晰可控

2.2、GitHub flow

img

  • 只有一个master主分支(没有develop分支),有 功能/补丁开发 需求时,直接从master拉取新分支,完成开发后向master发起pull request(简称“pr”),pull request被接受后合并进master分支
  • 优点:维护简单,适合“持续发布”的产品
  • 缺点:master分支可能与发布的产品版本不一致

2.3、GitLab flow

  • 只有一个master主分支(没有develop分支)
  • 「上游优先」,如下图,master是pre-production的上游,pre-production又是production的上游(即将代码流向的关系)。只有上游被采纳了的代码变化,才能应用到下游
img
  • 一个版本一个分支,对于每一个发布的稳定版本,都从master新拉出一个分支。后续只有修复bug才允许把代码合并到这些分支
img

三、fork与branch区别

fork:分叉
branch:分支

这两者在Git中都有代表分支的意思。但是fork是代码仓库托管平台(如github)的一种操作,表示从托管平台复制一个新的、自己的仓库;而branch指的是从仓库内划分出一个新的分支。

1
2
3
4
5
git clone 仓库url		
#将文件从远程代码仓下载到本地,从而形成一个本地代码仓。会在命令行当前所在的目录创建一个与仓库同名的目录,并初始化一个`.git`文件。克隆的仓库默认拉取了文件的所有版本,即拉取了所有commit

git branch 分支名
#在当前分支点基础上,创建一个新分支

四、HEAD

  • HEAD 指向当前分支最新的提交。
  • HEAD~ 等同于 HEAD^,表示当前提交的父提交。
  • HEAD^ 表示当前提交的第一个父提交。
  • HEAD~n 表示当前提交的第 n 代祖先提交。

Git理论基础
http://timegogo.top/2023/02/22/Git/Git理论基础/
作者
丘智聪
发布于
2023年2月22日
更新于
2023年10月29日
许可协议