我与Git的那些破事(下)--分支模型
在上篇文章中,我提到了Git的基本概念和一些本人实际项目中的总结。然而,最近读了Vincent Driessen写的一篇文章,觉得他总结的太好了,站在他肩膀上忍不住将自己的理解分享出来。Vincent Driessen的文章连接放在本文最下方,有需要的童鞋可去参考一二。
话不多上,干货顶上。
分支模型

上述这张图便是一张完整的分支模型。乍看上去,似乎有点复杂,其实理解后非常简单,并且十分经典。如果你所在项目代码管理较为混乱,我相信,该模型会对你有所帮助。
主要分支
对于完整的项目来讲,有两个主要分支,它们的生命周期与项目等同,即一直会存在:
- master分支
- develop分支
master:我相信,每个git用户都非常熟悉该分支,没错,这是创建项目时的默认分支。对于该模型,我们认为master分支上任何一个点,都是一个稳定的版本,可以直接部署至产线环境。
develop:这是master的平行分支,也是项目中持续开发的分支。该分支的HEAD始终反应着下一个版本的最新修改。所有的feature分支代码都往这里合入。通常,自动化测试环境都由该分支构建。

当develop分支合入了所有需求分支的代码(下个发布版本所需的功能)并且稳定时,将develop代码合入到master分支,并打上版本tag(方便以后版本回溯)。
实际项目中,我们一般不直接从develop分支将代码合入至master分支,而是从develop拉出release分支,从release分支合入master分支。详情往下观看。
次要分支
除了master和develop分支,开发模型中还需要其他分支来协同开发,其生命周期各不相同,但最终都会被删除。
- feature分支
- release分支
- hotfix分支
feature分支
当开发团队接到一个新的需求,从develop分支拉出一个feature分支,该功能相关代码均在该分支开发。
当该分支开发完毕,将分支代码合入develop分支;
远端删除该feature分支,当然开发本地可保留该分支一段时间,防止出现乌龙事件。

本地创建一个feature分支:
#从本地develop分支拉出feature1分支
git checkout -b feature1 develop
#从远端develop分支拉出feature1分支
git checkout -b feature1 origin/develop
将本地分支上传到远端:
#将本地新建feature1分支上传到远端,并在远端命名为feature1
git push origin feature1:feature1
#将本地新建feature1分支上传到远端,并在远端命名为feature2
git push origin feature1:feature2
查询分支
#查询本地分支
git branch
#查询远端分支
git branch -r
#查询所有分支
git branch -a
本地切换分支
#切换到develop分支
git checkout develop
本地删除分支
#删除本地分支feature1
git branch -d feature1
#强制删除本地分支feature1
git branch -D feature1
#删除远程分支feature1
git push origin :feature1
release分支
当develop分支达到一个稳定点,从develop分支从拉出release分支,将其打包并部署到环境中,进行系统测试。
如果测试过程中,出现bug,在release分支进行bug修复,然后出包再次测试;
该bug确认修复后,将代码合入develop分支;
所有测试通过后,将代码合入master分支,并在master分支打tag(一般对应版本号)。

本地分支打tag
#切换master分支
git checkout master
#本地分支打tag
git tag -a 2.0.0 -m 'comments'
#本地tag上传至远端
git push --tags
本地删除tag
#本地删除tag 2.0.0
git tag -d 2.0.0
#删除远端tag 2.0.0
git push origin :refs/tags/2.0.0
当发布完成后,我们可以将远端的release分支删除,当然可以保留本地release分支一段时间,防止乌龙事件。
hotfix分支
当已发布的版本,在运行一段时间后,由于偶然等因素造成bug,需紧急修复,此时从master分支拉出hotfix分支进行bug修复。
当bug修复完成后,将代码分别合入develop分支和master分支。
合入master分支后,在master打上新的tag(一般是小版本号)。

新版本上线后,远端hotfix分支可以删除,本地hotfix分支可以保留一段时间,防止乌龙事件。
上述内容看完,再回过头来看最初的分支模型,是否觉得so easy呢~
再次感谢vincent Driessen,本文多处图片均是参考该篇blog而绘制:A successful Git branching model
作者:吴家二少
博客地址:https://www.cnblogs.com/wu-kai/
本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接
我与Git的那些破事(下)--分支模型的更多相关文章
- 我与Git的那些破事系列(下)--分支模型
在上篇文章中,我提到了Git的基本概念和一些本人实际项目中的总结.然而,最近读了一片Vincent Driessen写的一篇文章,觉得他总结的太好了,忍不住站在他的肩膀上写一篇自己的理解.文章的连接放 ...
- 我与Git的那些破事--代码管理实践
1. Git是什么? 作为一名程序猿,我相信大家都或多或少接触过git--分布式版本控制软件. 有人说,它是目前世界上最先进的分布式版本控制系统,我想说,是否最先进不知道,但确实好用,实用. 作为一款 ...
- 我与Git的那些破事(上)--代码管理
1. Git是什么? 作为一名程序猿,我相信大家都或多或少接触过git--分布式版本控制软件. 有人说,它是目前世界上最先进的分布式版本控制系统,我想说,是否最先进不知道,但确实好用,实用. 作为一款 ...
- IDEA环境下GIT操作浅析之二-idea下分支操作相关命令
上次写到<idea下仓库初始化与文件提交涉及到的基本命令>,今天我们继续写IDEA环境下GIT操作之二--idea下分支操作相关命令以及分支创建与合并. 1.idea 下分支操作相关命令 ...
- Git flow的分支模型与及经常使用命令简单介绍
Git flow是git的一个扩展集,它基于Vincent Driessen 的分支模型,文章"A successful Git branching model"对这一分支模型进行 ...
- git总结二、关于分支上——好好认识下分支是怎么回事
同样需要先来明确两件事: HEAD指针指向的是当前分支 分支(master, dev)指向的是最新的提交 一开始,git 中只有一个master分支,严格来讲,HEAD不是指向提交而是指向master ...
- git跟yum一样 linux下的命令使用和思想是类似的
git跟yum一样 linux下的命令使用和思想是类似的
- Git分布式版本控制系统(下)
Git分布式版本控制系统(下) 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方便 ...
- Git如何在不提交当前分支的情况下切换到其它分支进行操作——git stash
假如现在的Bug你还没有解决,而上边又给你派了一个新的Bug,而这个Bug相比较现在正在苦思冥想的Bug比较容易解决. 你想先解决新的Bug,可是之前的Bug还没有解决完而不能提交.怎么办? 解决方法 ...
随机推荐
- mysql主从备份说明(win系统)
1. 环境描述: 主机:192.168.2.201 从机:192.168.2.111 Mysql版本:5.7 2. 主机my.ini配置: log-bin=C:\mysqlback expire-lo ...
- Vue学习笔记-vue-element-admin 前端学习
一 使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7 (Windows x86- ...
- 第45天学习打卡(Set 不安全 Map不安全 Callable 常用的辅助类 读写锁 阻塞队列 线程池)
Set不安全 package com.kuang.unsafe; import java.util.*; import java.util.concurrent.CopyOnWriteArray ...
- 通过webhost扩展方式初始化EFCore数据库
通过webhost扩展方式初始化EFCore数据库 EFCore数据库初始化 1.定义WebHostMigrationExtensions类 public static class WebHostM ...
- linux的0,1,2号进程
一.答案 https://blog.csdn.net/gatieme/article/details/51532804 仔细读一下作者的博客,都是操作系统底层相关. 二.补充: 1.linux代码,a ...
- 安装node环境以及cnpm
其实我老早以前就发现 node 版本太高也不行 以往的版本下载地址: https://nodejs.org/zh-cn/download/releases/ 下载并解压到 /usr/local/ 下 ...
- HDOJ-6685(暴力+思维)
Rikka With Coin HDOJ-6685 主要的思想如下: 首先10元的硬币最多只会用一个,如果用了两个,直接替换成一个10元.一个20元一定不亏. 20元的硬币最多只会用三个,如果用了四个 ...
- Python3+pygame实现的90坦克大战 代码完整 有演示效果
我是一个典型的80后,年轻时玩过了特别多的游戏,所以这几天用Python3+pygame实现了一个另外小游戏"坦克大战"(其他的游戏,请翻阅我的博客) 本实例代码量有些多,完整的版 ...
- Boltdb学习笔记之〇--概述
更多精彩内容,请关注微信公众号:后端技术小屋 看了boltdb也有一阵子了,看完之后总想写点什么,因为感觉到这可能是个不小的坑,所以迟迟没有动笔(没错我的拖延症又犯了..).最近有一种流行的说法:如果 ...
- SSRF漏洞利用之Redis大神赐予shell
0x00实验环境 1.centos靶机(IP为:192.168.11.205,桥接模式) 2.kali黑客攻击主机(IP为:192.168.172.129,NAT模式) 0x01实验原理 这段 ...