干货:基于 Git Flow 的 Git 最佳实践(附加解决大家经常碰到的问题)
突然想写这一篇Git的使用心得,主要有几个原因,其一是自己使用Git也有快3年时间了,其间自己经历过一些坑,也有迷茫的时候,在呆过的大大小小的团队中,其实每个人也都并不是Git专家,很多对于流程以及Git本身的理解,还处于一个比较混乱的地带。自己写这篇文章希望能抛砖引玉,在总结自己得失的同时,能给大家带来更深层次的思考。
直接进入主题,经过这么多年的实践,多次想避开Git flow寻找更简单的流程,每次自认为找到了捷径,但事实上都发现有这样或者那样更多的问题,所以,我认为最佳的Git实践,仍然得基于标准的Git Flow,来看看Git Flow的标准模型,下面是大家非常熟悉的图:

来自非常经典的Git flow奠基论文:http://nvie.com/posts/a-successful-git-branching-model/
基于这个Git Flow,我所认为的Git 最佳实践,补充和修复了这么几点:
1.分支一共有5类,名称用 / 来区分是因为Sourcetree里面 / 可以作为一个文件夹使用,命名标准为下面这样:
master
develop
feature/***
release/v13.5
hotfix/v13.2
本地的分支可以有一些其他的命名规则,没关系,但是推到远程的必须是这几种命名规范,最好一字不差,比如不要把release写成Release
2.此Git Flow唯一可以变通的地方为开发的时候非必须一定要用feature分支,比如说一个项目刚开始开发的时候,或者突然发现一个不是特别严重的bug,我现在先修改下,想在下一个版本发的时候一起带出去,这种情况就在develop上面改就行了。
3.与Git Flow的论文略微不同,我倡导的是:一个版本开发完成,需要提测的时候,由各个feature合并到develop,然后在develop上开发自测,修复bug,正式提测的时候,由develop迁出release分支,提测
我个人认为这是一个非常良好的开发模型,伸缩性强,适用于各个规模的开发团队,一个人开发,我也会这么干,20个人的团队,也是没有任何问题的。关于这个模型,如果有任何疑问,都可以关注我的公众号(文章底部),然后给我发消息,我会一一解答。
还有关于之前收集网友的很多问题和疑问,我在这里一一回答下:
1,最经常问的,为什么忽略文件无效
因为Git的忽略文件没有办法对已经纳入版本库的文件生效,解决办法:gitignore里面添加完之后,把本地文件删了,然后commit,push上去,别人再更新,就OK了,下次还有这种类型的文件,就直接忽略了
2,Git可以添加项目中的文件夹权限控制吗
不行,问这个问题的原因是因为很多人把svn的思维搬到Git上来,Git并不是以文件夹为单位来组织的,所以现在大多数公司中UI的图片等资源,像png,psd等文件都是用的svn管理,代码用Git管理。想要用这种权限控制的话,很多人另辟捷径选择用Git的子模块和子数来处理,我感觉也是不太好
3,关于Git客户端
我认为就两种选择,命令行和Sourcetree等全局的客户端软件,TortoiseGit根本不适用,原因就是Git不是以文件夹为组织单位的,Tortoise是依托于文件管理器的操作,所以不对付。然后就是各种IDE的插件,很多人用,我个人也是不喜欢,原因很简单,Git是一种生活方式,并不只是在项目中用用而已
4,关于Git代码分支回滚
暴力派reset:
本地的分支先(reset)重置到一个commit,然后:git push -f,强推,这种是属于删除commit历史的行为,而且强推需要权限,一般来说master分支默认都不让强推
优点:彻底清除版本库上无用的代码,干净,但是做这种操作的同时,最好本地新建一个分支备份下代码
缺点:误操作的代价比较大
婉约派revert:
git revert HEAD~1(1代表从0到1,回退包含当前commit的两个commit,然后会创建新的commit)
优点:所有历史都在,回退的做法为新建一个commit来回滚之前几个commit的代码
缺点:回退几个commit这个需要手动计算,比较烦
5,cherry pick合并单个提交
cherry pick不能完全合并单个commit,因为每个commit都是建立在前一个commit之上
关于我:Android和JavaEE开发工程师,运营有微信公众号"大土豆爱开发",原则“简单,分享”,涉及的内容包括但不限于JavaEE,Android,Git等,欢迎大家关注,共同学习。
二维码:

干货:基于 Git Flow 的 Git 最佳实践(附加解决大家经常碰到的问题)的更多相关文章
- Git Flow,Git团队协作最佳实践
规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高, 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...
- CI Weekly #18 | flow.ci iOS 最佳实践出炉,正式支持 Git@OSC 构建
如大家所期待,flow.ci 现已支持开源中国的代码仓库 - 码云,可以直接构建 Git@OSC 的项目了,点击创建项目-选择代码仓库-选择码云-绑定 OSChina 账户-选择要构建项目,教程看这里 ...
- git flow工作流实际项目实践
公司项目的开发流程主要是这样 代码分为 develop分支 master分支 平时我开发的时候,主要在develop分支上改动 一般来讲,有以下几种改动方式 1.直接在develop上修改代码 这种一 ...
- 基于springboot的web项目最佳实践
springboot 可以说是现在做javaweb开发最火的技术,我在基于springboot搭建项目的过程中,踩过不少坑,发现整合框架时并非仅仅引入starter 那么简单. 要做到简单,易用,扩展 ...
- 【转载】干货再次来袭!Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载八)用命令实现批量添加用户
Windows添加用户需要至少5个界面,而Linux一条命令就搞定了,这是不是高效人士办公第一法则呢.本文不给你一堆参数和选项,不让你见识教条主义,只给你最实用的代码. 想每天能听到小妞的语音播报,想 ...
- C# 异常处理最佳实践,解决代码分析提示CA1031:不要捕捉一般异常类型的解决办法
异常类型 异常一般分为系统异常 和 应用异常.系统异常有无法连接数据库,而应用异常是业务逻辑异常,比如授权失败. 在 C# 中异常基于 System.Exception,派生出 System.Syst ...
- 我的Android最佳实践之—— 解决闪空界面问题
进入应用时,由于应用的启动Activity都会有默认的theme,所以会跳一下原始界面,才启动我们定义的theme. 修改这个问题的方法,就是给应用启动的Activity设置一个空的theme.如下面 ...
- 应用Git Flow—Git团队协作最佳实践
规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...
- 从一个前端项目实践 Git flow 的流程与参考
Git flow 出自 A successful Git branching model,这里使用了一个前端项目配合本文稿实施了 git flow 并记录流程作出示例和参考,对 hotfix 与持续部 ...
随机推荐
- Quartz源码分析
先简单介绍一下quartz,Quartz是一个功能丰富的开源作业调度库,可以集成到几乎任何Java应用程序中 - 从最小的独立应用程序到最大的电子商务系统.quartz可用于创建执行数十,数百甚至数十 ...
- 平面之后3D成主流?VR全景表示不服!——全景智慧城市常诚
目前很多人对VR全景这个词汇没有明确的概念,更没有人做过全面的研究,VR全景是什么?VR全景可以做什么?不同于我们经常听到的VR色情,全景智慧城市常诚今天就来为各位做一个系统全面的介绍,深入了解之后, ...
- 使用SQL语句使数据从坚向排列转化成横向排列(排班表)
知识重点: 1.extract(day from schedule01::timestamp)=13 Extract 属于 SQL 的 DML(即数据库管理语言)函数,同样,InterBase 也支持 ...
- Linux 多个JDK的版本 脚本切换
这里是在CentOS 系统下配置多个版本之间的切换 1.到官网下载jdk7和jdk8 地址:http://www.oracle.com/technetwork/cn/java/javase/downl ...
- PHP基础入门(三)---PHP函数基础
PHP基础入门(三)---函数 今天来给大家分享一下PHP的函数基础.有了前两章的了解,想必大家对PHP有了一定的基础了解.想回顾前两章的朋友可以点击"PHP基础入门(一)"&qu ...
- 解决Linux下面Firefox无法播放mp3的问题
之前一直使用kali linux ,上班屏蔽噪音都用网易音乐.既然没有Linux客户端,那就网页版吧.不得不说,网易音乐的网页版做的真心赞. 在Kali Linux下面使用Firefox听歌一直都很正 ...
- vue初学实践之路——vue简单日历组件(1)
---恢复内容开始--- 最近做的项目有一个需求,需要有一个日历组件供预定功能使用,之前的代码过于繁琐复杂,所以我采用vue重写了这个组件. npm.vue等等安装. 只是一个简单的日历组件,所以并不 ...
- cpio用法详细说明
1.1 cpio基本介绍 cpio是一个非常古老的归档工具.已逐渐被tar替代,但是有些功能是tar不存在的,所以还是分享下它的用法. cpio - copy files to and from ar ...
- 高性能队列Disruptor系列3--Disruptor的简单使用(译)
简单用法 下面以一个简单的例子来看看Disruptor的用法:生产者发送一个long型的消息,消费者接收消息并打印出来. 首先,我们定义一个Event: public class LongEvent ...
- python 标准库 -- os
os os.getcwd() os.getcwd() # 获取当前工作目录 os.listdir(path) os.listdir('/tmp') # 列出指定目录下的文件和目录 os.mkdir(p ...