记一次merge request+git rebase的工作模式

大部分前端的工作模式

  • 协同开发,大家都git clone 远程仓库到本地
  • 从master上切自己的本地分支进行开发
  • 若遇到线上紧急bug需要修复,从master上切一个bug-fixed分支 修复bug后 把此分支merge到master 紧急发布生产
  • 然后把bug-fixed的merge到dev分支上 以保持dev和master的同步
  • 测试阶段,将自己的本地分支merge到dev分支
  • 测试完毕,上线阶段的时候再把自己的本地分支merge到master分支发生产
之前所在的公司几乎都是上述这种工作模式,其优点就是傻瓜式操作,简单易上手
其弊端就是大部分人commit之前不喜欢pull下最新代码 导致会有merge commit,经常也会遇到冲突,然后git树不是线性的 

现公司要求的工作模式:

以sourcetree举例

  • 协同开发,大家都git clone 远程仓库到本地
  • 从master上切feature分支作为本期需求的开发分支
  • 所有开发人员从feature分支上切自己的本地分支进行开发 以姓名-模块的形式命名分支
  • 每天推送代码之前,先切到feature分支上 git pull最新的代码 并且是用变基代替合并 保证自己本地的feature是最新的代码
  • 切回到自己的开发分支,然后右击feature分支 选择将当前变更变基到feature分支上 有冲突则解决冲突
  • 将自己的分支推送到远程
  • 在gitlab上发起merge request 将自己的分支合并到feature分支上并且指定review的人员 Review通过后由其merge
  • 如果线上有紧急bug修复,从master上切bug-fixed分支 修复bug后发起merge request至master 并设定相关Review人,Review通过后,将对应commit cherry-pick至Master分支

git命令行的话则是如下操作

  • 克隆远程仓库到本地: git clone 远程仓库地址
  • 此时本地默认只有master分支 需要切换到远程的featureA分支: git checkout -b featureA origin/featureA
  • 从featureA上切自己的分支开发: git checkout -b 姓名_模块
  • 提交代码:git add. + git commit -m '描述' 两连
  • 在自己的开发分支git fetch 获取远端所有更新
  • git rebase origin/featureA 本地开发分支上所有的变更变基最新的featureA上
  • git push -f origin 姓名_模块
  • 在gitlab上创建merge request

总结

现公司的工作模式有以下几点是我之前没有遇到过的 更加的规范,有利于多人协同开发的工作模式 继续加油~~

git rebase

变基rebase这个操作说白了就是,重新选定当前提交的根节点
这个操作会把整个本地分支移动到feature分支的后面,有效地把所有feature分支上新的提交并入过来 就能保证git树的线性了

merge request

以前我们习惯于自己在本地进行将开发分支和功能分支进行合并 有冲突解决冲突 然后推送到远端
merge request的作用其实就是多了一层review 由指定的人员review之后再merge

cherry-pick

复制一个特定的提交到当前分支 避免重复劳动 也不用合分支
git cherry-pick 4c805e2

原文地址:https://www.cnblogs.com/hanyan99/p/13811062.html