此规范适用情况
1、项目基于 gitlab 工作流开发
- gitlab 有一套完整的多分支开发流程
2、项目存在多分支协同开发
- 有 dev、staging、prod 等分支
- 有具体每个 issue 的 merge-request 分支(参考 gitlab 工作流)
3、项目不关注每个提交的具体提交记录 只关注整体的代码
- 当 merge-request 有多条提交记录时,需要合并提交记录为一条 -> 尽量减少主分支的提交记录
- 项目希望提交树尽量干净,不需要 merge 信息
tip: 如果是小项目,开发者在 dev 分支开发就不会涉及到此规范,直接拉别人的代码再解决冲突提交就好了
创建 merge-request 分支
在 gitlab 上,当管理者 assign 给我们 issue 时,我们可以在 issue 详情页面 create merge request,我们可以选择 merge request 的源分支,当 merge request 通过代码审查后,会自动合并到主分支
squash 合并提交记录
可以使用 squash 操作合并提交记录
有很多工具有可视化操作,git使用命令也可以完成,不过使用工具会更方便 比如:GitHub Desktop
cherry-pick 代码
如果在开发过程中,有一个代码是其他分支的,没有提交到主分支,你刚好需要使用,这时候可以使用 cherry-pick 命令,把代码拉过来,这时候你的代码里就会有这条记录
具体命令:
git checkout target branch // 先切换到其他分支
git log // 查看 提交记录
git cherry-pick [git hash] // [git hash] 就是需要 pick 过来的 提交记录的 hash 值,是一串很长的字符串
rebase 代码变基
如果在开发过程中,有一个新合并到主分支的代码,或者是你在其他分支有新的提交,而当前你工作的分支需要那些代码,你可以基于 主分支/其他新分支进行 rebase(变基),相当于代码变成了目标分支的代码
tips: rebase 代码后可能需要解决冲突,解决后一定要强推到远端,提交记录才会是正常的,不然可能会重复
具体命令:
git rebase target branch // rebase
git push target branch --force // 强推
因为 rebase 是在你工作的分支上进行的,所以可以强推,只要处理好冲突就行
为什么需要使用 rebase 而不是 merge
我们可以通过以下两张图来看出区别
merge:
rebase:
可以看到 merge 后的代码在主分支上会比 rebase 多一个 merge 的提交信息,这个信息其实我们是不关注的,多分支协同开发的情况下,这种合并情况会很多,为了避免出现这么多的merge提交信息,我们通常采用 rebase 合并代码