突然想写这一篇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 最佳实践(附加解决大家经常碰到的问题)的更多相关文章

  1. Git Flow,Git团队协作最佳实践

    规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高, 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...

  2. CI Weekly #18 | flow.ci iOS 最佳实践出炉,正式支持 Git@OSC 构建

    如大家所期待,flow.ci 现已支持开源中国的代码仓库 - 码云,可以直接构建 Git@OSC 的项目了,点击创建项目-选择代码仓库-选择码云-绑定 OSChina 账户-选择要构建项目,教程看这里 ...

  3. git flow工作流实际项目实践

    公司项目的开发流程主要是这样 代码分为 develop分支 master分支 平时我开发的时候,主要在develop分支上改动 一般来讲,有以下几种改动方式 1.直接在develop上修改代码 这种一 ...

  4. 基于springboot的web项目最佳实践

    springboot 可以说是现在做javaweb开发最火的技术,我在基于springboot搭建项目的过程中,踩过不少坑,发现整合框架时并非仅仅引入starter 那么简单. 要做到简单,易用,扩展 ...

  5. 【转载】干货再次来袭!Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载八)用命令实现批量添加用户

    Windows添加用户需要至少5个界面,而Linux一条命令就搞定了,这是不是高效人士办公第一法则呢.本文不给你一堆参数和选项,不让你见识教条主义,只给你最实用的代码. 想每天能听到小妞的语音播报,想 ...

  6. C# 异常处理最佳实践,解决代码分析提示CA1031:不要捕捉一般异常类型的解决办法

    异常类型 异常一般分为系统异常 和 应用异常.系统异常有无法连接数据库,而应用异常是业务逻辑异常,比如授权失败. 在 C# 中异常基于 System.Exception,派生出 System.Syst ...

  7. 我的Android最佳实践之—— 解决闪空界面问题

    进入应用时,由于应用的启动Activity都会有默认的theme,所以会跳一下原始界面,才启动我们定义的theme. 修改这个问题的方法,就是给应用启动的Activity设置一个空的theme.如下面 ...

  8. 应用Git Flow—Git团队协作最佳实践

    规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...

  9. 从一个前端项目实践 Git flow 的流程与参考

    Git flow 出自 A successful Git branching model,这里使用了一个前端项目配合本文稿实施了 git flow 并记录流程作出示例和参考,对 hotfix 与持续部 ...

随机推荐

  1. DDD理论学习系列(5)-- 统一建模语言

    DDD理论学习系列--案例及目录 1.引言 上一节讲解了领域模型,领域模型主要是将业务中涉及到的概念以面向对象的思想进行抽象,抽象出实体对象,确定实体所对应的方法和属性,以及实体之间的关系.然后将这些 ...

  2. 不完全翻译:Threading in C#-Getting Started

    Introduction(引入,介绍) and Concepts(概念) 原文地址:http://www.albahari.com/threading/ 注:水平有限不能全文翻译,备注了个别字段和短句 ...

  3. python装饰器大详解

    1.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我要理解两点:a.在全局不能访问到局部定 ...

  4. JQuery源码阅读记录

    新建html文件,在浏览器中打开文件,在控制台输入consoole.log(window);新建html文件,引入JQuery后在浏览器中打开,在控制台同样输入consoole.log(window) ...

  5. JSON 转换异常 multipartRequestHandler servletWrapper

    下面出现红色的字还有警告,解决方法:本人项目是struts1 from类继承了“extends ActionForm” .把它去掉就行了.如果你是其它的框架一定是继承引起的作个参考吧. ....... ...

  6. jersery+jetty嵌入式restful的框架开发

    随着微服务的流程,越来越多的后台服务采用了restful api风格的开放API,jersery+jetty嵌入式变成了一个很好的选择, 我自己写了一个简单的框架,https://github.com ...

  7. EJB系列 - 会话Bean基础知识

    本人博客文章网址:https://www.peretang.com/basic-knowledge-of-session-bean/ 什么是会话 有限的时间周期内,客户端和服务器之间的连接 为什么使用 ...

  8. Kubernetes部分Volume类型介绍及yaml示例

    1.EmptyDir(本地数据卷) EmptyDir类型的volume创建于pod被调度到某个宿主机上的时候,而同一个pod内的容器都能读写EmptyDir中的同一个文件.一旦这个pod离开了这个宿主 ...

  9. ASP.NET MVC 重写RazorViewEngine实现多主题切换

    在ASP.NET MVC中来实现主题的切换一般有两种方式,一种是通过切换皮肤的css和js引用,一种就是通过重写试图引擎.通过重写试图引擎的方式更加灵活,因为我不仅可以在不同主题下面布局和样式不一样, ...

  10. 框架基础:ajax设计方案(五)--- 集成promise规范,更优雅的书写代码

    距离上一篇博客书写,又过去了大概几个月了,这段时间暂时离开了这个行业,让大脑休息一下.一个人旅行,一个人休息,正好也去完成一个目标 --- 拥有自己的驾照.当然,也把自己晒的黑漆马虎的.不过这一段时间 ...