Git 分支模型与开发规范

01、分支模型

  • master:长期分支,一般用于管理对外发布版本,每个 commit 对一个 tag,也就是一个发布版本
  • develop:长期分支,一般用于作为日常开发汇总,即开发版的代码
  • feature: 短期分支,一般用于一个新功能的开发
  • hotfix :短期分支 ,一般用于正式发布以后,出现 bug,需要创建一个分支,进行 bug 修补。
  • release :短期分支,一般用于发布正式版本之前(即合并到 master 分支之前),需要有的预发布的版本进行测试。

master和develop作为主要分支。

新功能的开发在feature上进行,该分支从develop分支派生,功能开发完毕后merge到develop分支。 一般feature分支都存在与开发者本地,除非该分支需要多方合作才提交到远程仓库。

如何保证和develop分支的代码同步?每天从develop分支拉去最新的代码,使用rebase命令 不要使用pull,每次合并上游更改时feature 分支都会引入一个外来的合并提交,使用pull会生成一个新的合并commit。

在将其他分支的代码合并到当前分支时,如果那个分支是当前分支的父分支,为了保持图表的可读性和可追踪性,可以考虑用 git rebase 来代替 git merge;反过来或者不是父子关系的两个分支以及互相已经 git merge 过的分支,就不要采用 git rebase 了,避免出现重复的冲突和提交节点。

release分支是从develop分支派生, bug fix只在release分支上进行,该分支也是QA的测试分支,开发结束后同时合并进develop和master分支

使用merge request将release分支的提交合并master分支,并打上tag。

hotfix可以单独出一个分支,也可以直接在release分支上进行。

所有master上的代码都是从release分支合并进去的。

追踪远程develop分支

git checkout -b develop origin/develop

feature 分支操作

获取dev分支最新代码

$ git pull --rebase origin dev
或者
$ git rebase dev

$ git checkout -b myfeature develop

$ git checkout develop
Switched to branch ‘develop‘

$ git merge --no-ff myfeature
Updating ea1b82a..05e9557
(Summary of changes)

$ git branch -d myfeature
Deleted branch myfeature (was 05e9557).

$ git push origin develop

rebase最大的好处是你的项目历史会非常整洁。首先,它不像git merge 那样引入不必要的合并提交。其次,如上图所示,rebase导致最后的项目历史呈现出完美的线性——你可以从项目终点到起点浏览而不需要任何的Fork。这让你更容易使用git log 、git bisect 和gitk 来查看项目历史。 不过,这种简单的提交历史会带来两个后果:安全性和可跟踪性。如果你违反了Rebase黄金法则,重写项目历史可能会给你的协作工作流带来灾难性的影响。此外,rebase不会有合并提交中附带的信息——你看不到feature分支中并入了上游的哪些更改。

rebase的黄金法则
git rebase 的黄金法则便是,绝不要在公共的分支上使用它。 比如说,如果你把master分支rebase到你的feature分支上会发生什么

release 分支操作

# 合并到master
$ git checkout master
Switched to branch ‘master‘

$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)

$ git tag -a 1.2

# 合并到develop
$ git checkout develop
Switched to branch ‘develop‘
$ git merge --no-ff release-1.2

# 删除release分支
$ git branch -d release-1.2

hotfix 分支操作

当产品发布出去之后,有紧急的bug,就需要从master分支中拉出一个hot fix分支。 这么做的好处是develop分支上的同事可以继续进行开发,另一个团队则可以在master分支上进行一个产品修复更新。 修复好之后,合并到mater分支和develop分支。

这里有一个特殊情况,如果当时的release分支还存在,那么hotfix的更新需要merge到相应的release分支上。 如果release分支已经不存在了,那么就只需要merge到master分支和develop分支。

创建远程分支

git push origin local_branch:remote_branch
local_branch必须为你本地存在的分支,remote_branch为远程分支,如果remote_branch不存在则会自动创建分支。

02、开发规范

commit规范

只要坚持做到以下几点就 OK 了:

  1. 提交时的粒度是一个小功能点或者一个 bug fix,这样进行恢复等的操作时能够将「误伤」减到最低;
  2. 用一句简练的话写在第一行,然后空一行稍微详细阐述该提交所增加或修改的地方;
  3. 不要每提交一次就推送一次,多积攒几个提交后一次性推送,这样可以避免在进行一次提交后发现代码中还有小错误。

谁说历史不可篡改了?前提是,想要合并的那几次提交还没有推送到远程!

Commit Message 格式

<type>(<scope>): <subject>
<空行>
<body>
<空行>
<footer>

type

  • feat:新功能(feature)
  • fix:修补bug
  • docs:文档(documentation)
  • style: 格式(不影响代码运行的变动)
  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
  • test:增加测试
  • chore:构建过程或辅助工具的变动

Scope
用来说明本次Commit影响的范围,即简要说明修改会涉及的部分。这个本来是选填项,但从AngularJS实际项目中可以看出基本上也成了必填项了。

Subject

用来简要描述本次改动,概述就好了,因为后面还会在Body里给出具体信息。并且最好遵循下面三条:

  • 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
  • 首字母不要大写
  • 结尾不用句号(.)

Body

<body>里的内容是对上面subject里内容的展开,在此做更加详尽的描述,内容里应该包含修改动机和修改前后的对比。

Footer

footer里的主要放置不兼容变更和Issue关闭的信息

Revert

此外如果需要撤销之前的Commit,那么本次Commit Message中必须以revert:开头,后面紧跟前面描述的Header部分,格式不变。并且,Body部分的格式也是固定的,必须要记录撤销前Commit的SHA值。

03、链接

时间: 2024-08-05 12:57:20

Git 分支模型与开发规范的相关文章

一个成功的 Git 分支模型(适用于商业应用开发)

在这篇文章中,我将推广一下大约一年前我介绍过的一些项目(公私皆有)中使用的开发模型,它们的结果都非常成功.有段时间我非常想写出来分享一下,但是我至今才抽出时间来.我不会言及任何项目细节,仅讨论分支策略和发布管理. 为何使用 git? 关于 Git 和集中式源码版本控制系统的优缺点对比讨论, 见 此 web.这里有很多精彩激烈的论战.作为一名开发者,现在我更偏好使用 Git .Git 真的改变了开发者关于合并和分支的认知.我来自传统的 CVS/Subversion 世界,合并/分支是件恐怖的事情

(转载)介绍一个成功的 Git 分支模型

介绍一个成功的 Git 分支模型 在这篇文章中,我提出一个开发模型.我已经将这个开发模型引入到我所有的项目里(无论在工作还是私人)已经一年有余,并且它被证明是非常成功的.我打算写这些已经很久了,但我一直找不到时间来做,现在终于有时间了.我不会讲任何项目的具体细节,仅是关于分支策略和释放管理相关内容. 它主要体现了Git对我们源代码版本的管理. 为何是Git? 对于Git与其他集中式代码管理工具相比的优缺点的全面讨论,请参见这里.这样的争论总是喋喋不休.作为一个开发者,与现今的其他开发工具相比较,

Git 分支模型

翻译自:https://nvie.com/posts/a-successful-git-branching-model/ 在这篇文章中,主要介绍 Git 分支模型.不会谈论任何项目的细节,只讨论分支策略和发布管理. Git分布式和集中式理解 我们配置了中央存储库可以很完美的配合该分支模型工作.这里需要注意下,这个仓库只是被认为 是中央仓库(因为Git是DVCS(分布式版本管理系统),在技术层面上没有中央仓库).我们将这个中央仓库称为origin,应该所有Git用户都熟悉这个名称. 每个开发人员都

【转】一个成功的Git分支模型 .

---恢复内容开始--- 能力所限,本文的翻译多处都很不地道,如果哪些地方难于理解,还烦请查看原文.—— Dbzhang800 20110921 在本文中,我向大家介绍的是在大约一年前我为自己的项目(包括工作和私人项目)引入的且已被证实非常成功的一个开发模型(development model).这段时间我一直想写点关于它的东西,但在此之前,我却从未能抽出充足的时间来完成这件事.我不会谈论项目的任何细节,只涉及分支策略(branching strategy)和发布管理(release manag

Git分支模型

本文介绍一种使用Git进行源代码管理的分支模型,着重于如何使用Git更好的管理我们的源代码. 我假定您对Git有一定了解,会使用基本的Git命令进行一些简单的源代码管理工作.这不是一篇Git使用教程. 文章的主要思想源自以下链接: http://nvie.com/posts/a-successful-git-branching-model/ 根据自己的使用情况进行了补充. 我们知道Git是一个不需要中心服务器就能工作的源代码管理系统:但我仍然建议你至少保持一个逻辑上的中心服务器来存放你的长期分支

一个成功的 Git 分支模型

本文由 伯乐在线 - henry 翻译,sunbiaobiao 校稿.未经许可,禁止转载! 在这篇文章中介绍的开发模型在大约一年前已经在我的私有项目和工作引入的,而且已经被证明是非常成功的.我想写一些关于这个模型的东西已经好一段时间了,但是一直苦于没有时间,不过现在可以了.我不想探讨任何项目细节,只讨论分支策略和发布管理. 这篇文章围绕着Git做为我们所有的源代码版本控制工具而展开的. 为什么是Git 为了深入探讨git和集中式源码版本控制系统的利弊,参见这些文章.这方面有太多的激烈争论.作为一

介绍一个成功的 Git 分支模型 Release 分支

英文原文: http://nvie.com/posts/a-successful-git-branching-model/ 中文版: 在这篇文章中,我提出一个开发模型.我已经将这个开发模型引入到我所有的项目里(无论在工作还是私人)已经一年有余,并且它被证明是非常成功的.我打算写这些已经很久了,但我一直找不到时间来做,现在终于有时间了.我不会讲任何项目的具体细节,仅是关于分支策略和释放管理相关内容. 它主要体现了Git对我们源代码版本的管理. 为何是Git? 对于Git与其他集中式代码管理工具相比

Git详解之三 Git分支

相关文档 — 更多 Git 基础培训.ppt GIT 使用经验.ppt GIT 介绍.pptx GIT 分支管理是一门艺术.docx Eclipse上GIT插件EGIT使用手册.docx git/github学习笔记.doc git 版本控制系统.docx Git开发管理之道.pdf Git内部培训资料.pptx Git权威指南-第5篇-第32章-Gerrit.pdf Gitolite 构建 Git 服务器.pdf 版本控制之道 - 使用Git.pdf Git使用指南(中文).pdf Git-C

Git开发分支使用与管理规范

最稳定的代码放在 master 分支上(相当于 SVN 的 trunk 分支),我们不要直接在 master 分支上提交代码,只能在该分支上进行代码合并操作,例如将其它分支的代码合并到 master 分支上. 我们日常开发中的代码需要从 master 分支拉一条 develop 分支出来,该分支所有人都能访问,但一般情况下,我们也不会直接在该分支上提交代码,代码同样是从其它分支合并到 develop 分支上去. 当我们需要开发某个特性时,需要从 develop 分支拉出一条 feature 分支