git

110 阅读3分钟

git工作流

GitFlow是Vincent Driessen提出的一个git操作流程标准,包含几个关键分支如下:

  • master 主分支。
  • develop主开发分支,包含确定即将发布的代码
    • feature 新功能分支,一般一个新功能对应一个分支,对于功能的拆分需要比较合理,以避免一些不必要的代码冲突
    • release 发布分支,发布的时候用的分支,一般测试 bug 在该分支进行修复 hotfix分支,紧急修bug的时候用的

优势

  • 并行开发:GitFlow可以很方便地实现并行开发,每个新功能都会建立一个新的feature分支,从而和已经完成的功能隔离开来,而且只有在新功能完成开发后,对应的feature分支才会合并到主开发分支上。如果正在开发某个功能,同时又有一个新的功能需要开发,只需要提交当前的feature的代码,然后创建另外一个feature分支并完成新功能开发,然后再切回之前的feature分支既可继续完成之前功能的开发。
  • 协作开发:GitFlow支持多人协同开发,因为每个feature分支上改动的代码都只是为了让某个新的feature可以独立运行。同时也容易知道每个人都在干嘛。
  • 发布阶段:当一个新feature开发完成的时候,它会被合并到develop分支,这个分支主要用来暂时保存那些还没有发布的内容,如果需要开发新的feature,只需要从develop分支创建新分支,即可包含所有已经完成的feature
  • 支持紧急修复:GitFlow还包含了hotfix分支。此类分支是从某个已经发布的tag上创建出来并做一个紧急的修复。并且紧急修复只影响这个已经发布的tag,而不会影响正在开发的新的feature。

补充

  • feature分支都是从develop分支创建,完成后再合并到develop分支上,等待发布。
  • 当需要发布时,我们从develop分支创建一个release分支。release分支会发布到测试环境进行测试。如果发现问题就在该分支进行修复。在所有问题修复之前,会不停重复发布->测试->重新发布->重新测试流程。
  • 发布结束后,这个release分支会合并到develop和master分支,从而保证不会有代码丢失。
  • master分支只追踪已经发布的代码,合并到master上的commit只能来自release分支和hotfix分支。
  • hotfix分支的作用是紧急修复一些bug。

git rebase和git merge的区别

git rebase和git merge一样都是从一个分支获取并且合并到当前分支。

git merge

自动创建一个新的commit,如果合并的时候遇到冲突,仅需要修改后重新commit

优点

记录了真实的commit情况,包括每个分支的详情

缺点

每次merge会自动产生一个merge commit,所以在使用一些git的GUI tools,特别是commit比较频繁时,看到分支很杂乱。

git rebase

会合并之前的commit历史

优点

得到更简洁的项目历史,去掉了merge commit

缺点

如果合并出现代码问题不容易定位,因为重写了history。因此,当需要保留详细的合并信息的时候建议使用git merge,特别是需要将分支合并进入master分支时,当发现自己修改某个功能时,频繁进行了git commit提交时,发现其实过多的提交信息没有必要时,可以尝试git rebase。