查看原文
其他

git分支进阶

2016-10-13 jimmy_thr 前端圈

其实git除了版本控制,另外一个最突出的特点就是他的分支操作。git也是多人协作的必备武器。通常我们正常情况下只需要master 和 develop分支就够了。 这里我们先以这两条分支作为基准,进行一系列的操作。


开发新功能流程


这个应该属于develop分支的所有(Master分支只管稳定版). 第一步,应该创建develop分支。


  1. git checkout -b develop


然后拷贝主分支上的内容

  1. git rebase master


(  ̄3)(ε ̄ ), ok, 正常情况下,你的develop分支和master上的分支就一模一样了。 但是有的童鞋会有疑问,特么你为什么不用merge呢? 


我就不用~ 就不用~ 就不用~ 


(づ ̄ 3 ̄)づ , 其实使用merge和使用rebase的区别就是,(使用mege是终极合并分支,使用的是fast-forward的模式,造成两个分支的同步,给你开发新功能造成不必要的麻烦,当然,你可以使用. git merge --no-ff master合并,就可以啦。而你如果使用这个方式的话,会造成你图谱git出现不必要的复杂度。。。而使用rebase会改变的你分支的基底~ 这样看起来舒服一点。。。)
不懂诶~ ~ ~ ::>_<::


没事,上面括号里面知识参考的,你不看根本没关系。 如果你感性趣的话,可以google一下 | | 


所以这里我就不赘述了,继续


这时候我们就要在develop分支上开发新分支了。 


现在假设我们已经做了一些改动(可能已经过去两天了)。


这时候我们要把develop分支提交到远端,但在提交之前需要再同步一下master分支(为什么? 你猜~ 你也可以不同步,反正下次拉下来再同步的时候难受的是你自己)。接着使用:


  1. git fetch origin master 

  2. git rebase master


Ok~ 如果没出什么conflict那么恭喜你,你已经学会了同步分支的流程。 

另外,rebase还有一个iteractive模式,其实就是用来处理在你开发时别人提交的commit 和相关的-m参数. 这里我们不做要求,因为好麻烦, 笨宝宝不想说 (~﹃~)~zZ。


OK,最后当你develop分支开发完毕,这时候你需要切换到master分支上去合并。


  1. git checkout master 

  2. git merge --no-ff develop


OK,如果没有conflict恭喜,已经成功.

恩,说道这里,两个分支的开发git已经基本完毕了。

(┬_┬),为什么两个分支开发起来都这么复杂。

小朋友,你知道在一些团队,他们用的是5个分支吗? 
主要分支: master,develop
辅助分支: hotfix,feature,release
这里我们来介绍一个git的语法糖~git flow


git flow的开发流程


这个应该是集各种糖之大成,然你免去创建分支,删除分支,切换分支,打标签等等各种烦恼,以及...自行google
这里我只讲干货诶。
先按惯例上张图:


这个是gitflow的鼻祖做的讲解图。 看不懂吧,我一开始也看不懂,后面写写的就懂了。我先按分支说一下他们各自的功能吧:


主要分支:

  1. master: 稳定发布版(永远隐藏) 

  2. develop: 持续更新版(永远工作)

辅助分支:

  1. feature: 同步develop开发新功能,完成后与develop合并(merge) 

  2. release: 当新功能版本开发完后,就可以使用release分支进行创建分支并且合并,修完bug之后,与develop和master分支进行合并 

  3. hotfix: 这个应该算是紧急情况吧,当线上出问题的时候,需要马上进行修复,然后再提交。 完成后,会与develop和master分支进行合并.


ok , 基本上,说了各自分支的一些基本用处。 现在我们来正式介入git flow这个神奇的语法糖。


首先,我们要安装git-flow这个命令集合。


在MAC上,我们直接可以使用:


  1. brew install git-flow; //安装


在windows上,可以使用:

  1. wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash

直接复制贴到命令行就可以了。

git flow init

首先创建你的git 分支群,即上面说的那几个。 接下来,zsh || bash || cmd会弹出一个对话框。




像这样,闭着眼睛,一直点[Enter]就可以了。
接下来你会发现,你初始化的时候就是处在develop分支上面的.
Ok~ 正常的话,我们就可以开始进行功能的开发了。

使用git flow feature start [branchName]命令,建立你的功能分支, 之后你便可以创建一些特定功能.(他省去了,你创建分支,并rebase分支这一过程,超棒.~^_^~ )


  1. git flow feature start headerBar


之后他会提示你一些信息,告诉你现在正在feature/headerBar分支上,然后你就可以进行一些开发...


当然,功能开发是一项长久的任务,以后你也需要不断的进行git rebase develop进行分支的更新,然后继续开发。 要知道gitflow只是一个语法糖,原生的git命令你完全都可以用的。


所以,你还可以将新建的功能分支保存到远端。

  1. git flow feature publish feature/[branchName] 

  2. //或者使用原生的 

  3. git push origin feature/[branchName]


我倾向于用原生的...

完成开发之后一定要记着使用.git flow feature finish [branchName]


这里我们使用headerBar分支

  1. git flow feature finish headerBar


Ok~ 它便会将你的分支与develop进行合并,然后并且删除该feature分支。 如果你不犯傻两边都改动(develop和feature分支), 应该不会出现conflict的。满意~ #^_^#。


现在你的develop分支已经开发成熟了,想要发布一个测试版,这时候就可以使用git flow release start [tag]. 进行发布,记着打上标签(版本号). 还有,要保证这个release是你当前最稳定的版本才行。


  1. git flow release start v0.0.1

棒~ 现在,你已经创建了一个release的0.0.1版。然后,你可以在release分支上进行最后的修改。

 
现在,准备工作已经基本做完,现在我要正式发布啦~~ 
怕拉吧~ ( ⊙ _ ⊙ )一般吧

使用git flow release finish [tag]后面跟上你创建release的指定版本号,这里我们接着使用v0.0.1


  1. git flow release finish v0.0.1


Ok~这时候,release分支会和develop,master分支进行合并,然后被删除。 也就是,只有在release的时候,我们才能真正的接触到master分支。 这也是git-flow最让我感到震撼的, 完整的规范化,简直了~ 我爱 上它了。


还记得我们打的标记吗? 没错,他会保存在你的git仓库里。你可以使用git tag进行检查。


另外gitflow还有一个致命诱惑就是他的hotfix分支。简直啦~~~ 超级棒。 


当你的master已经上线,但是突然出现一个bug的话,你可以直接在master分支上改动,但是有个问题就是,master的分支超前了develop分支,造成你版本的混乱。 所以,这里我们可以直接使用git flow hotfix start [tagName], 其中tagName是新建的一个分支,表示完成bugfix的版本号。


  1. git flow hotfix start v0.0.2


现在,我们已经创建了一个分支hotfix/0.0.2, 而且他贴心的帮我们rebase了master内容,然后我们完成之后就可以使用git flow hotfix finish [tagName]进行hotfix的收尾工作。


  1. git flow hotfix finish v0.0.2


OK, 然后贴心的zsh会给你一些提示信息,说明已经和master,develop分支合并,完成了bug的修复。棒~ 所以,现在大多数team的都已经使用git-flow进行git的布局和管理,我们可以和如翔一般的分支管理说拜拜啦~ 虽然说是5大分支,但其实,我们的主要存在的分支依然只有develop和master分支~ 最后我们在一起回顾一下,git-flow的工作流程:


  1. 创建分支: git flow init 

  2. 进行功能分支的开发: git flow feature start [branchName] 

  3. 进行功能的合并: git flow feature finish [branchName] 

  4. 进行发布版的准备: git flow release start [tagName] 

  5. 完成发布版: git flow release finish [tagName] 

  6. 热插拔修复bug: git flow hotfix start [tagName] 

  7. 完成hotfix: git flow hotfix finish [tagName]


OK~ 现在git-flow我们已经基本学会了。当然,git原本就好到无懈可击,加上git-flow的优化,简直,神一般的存在。 最后再搬一句我爱的idiom:

Blessing in disguise

前端路漫漫啊~


【您可能感兴趣的文章】

一、入职新手必知的劳动法

二、组件化的css-module

三、再谈移动端适配和点5像素的由来

四、js的沙箱内容

五、高清屏概念解析与检测设备像素比的方法

六、学习设计模式前需要知道的事情

七、表单验证请进!!!

八、js高级语法之模式

九、[VueJS] V1 与 V2 组件实体之差异

十、优化你的DOM



前端圈--打造专业的前端技术会议

为web前端开发者提供技术分享和交流的平台

打造一个良好的前端圈生态,推动web标准化的发展

官网:http://fequan.com

微博:fequancom | QQ群:41378087


长按二维码关注我们

投稿:content@fequan.com

赞助合作:apply@fequan.com


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存