Git Squash and Merge场景下如何提前创建特性分支并同步最新代码
结论
完全可以不等待feature branch 1的PR评审、合并流程走完就提前创建feature branch 2开展开发,只要操作流程规范,完全能拿到全量最新代码,不会出现代码遗漏、冲突堆积的问题。
适配Squash Merge策略的标准操作流程
你们团队采用Squash and Merge作为合并策略,特性分支合入master时会被压缩为单个提交,根据feature branch 2是否依赖feature branch 1的未合入代码,分两种场景处理:
场景1:feature branch 2不依赖feature branch 1的代码
这是最常见的场景,操作非常简单:
- 切到本地
master分支,执行git pull拉取远端最新的master代码,保证本地开发基线是最新状态 - 基于最新的
master直接创建feature branch 2,正常开展开发即可 - 后续
feature branch 1评审通过合入master后,如果你还在开发feature branch 2,只需要切回master拉取最新代码,再切回feature branch 2执行git rebase master,把feature branch 1合入的变更同步到当前分支,出现冲突按提示逐段解决即可。
场景2:feature branch 2依赖feature branch 1尚在评审的未合入代码
这种情况也不需要等评审结束,操作步骤:
- 切到本地
feature branch 1分支,执行git pull拉取该分支评审过程中产生的最新提交(包括评审要求修改的代码调整) - 直接基于本地最新的
feature branch 1创建feature branch 2,在上面开发依赖feature branch 1能力的业务代码即可 - 等
feature branch 1评审通过、Squash合入master之后,做一次基线迁移即可:- 切到
master分支执行git pull,拿到feature branch 1被压缩后的合入提交 - 切回
feature branch 2,执行git rebase --onto master <feature-branch-1最后一个本地提交的hash值>,把当前分支的基线从原来的feature branch 1迁移到已经合入对应代码的master上,后续这个分支就和普通基于master开发的特性分支没有区别 - 如果
feature branch 1评审过程中做了代码修改,定期给feature branch 2执行git rebase feature-branch-1,把feature branch 1的最新调整同步过来,避免最后攒下大量冲突难以处理。
- 切到
实操注意事项
- 尽量不要叠多层依赖分支,比如在
feature branch 2还没合入master的时候又基于它拉feature branch 3、feature branch 4,等最底层分支Squash合入时,各层分支的基线迁移、冲突处理成本会非常高,最多叠一层依赖分支就足够 - 对已经推到远端的个人开发分支执行rebase后,用
git push --force-with-lease推送,不要用普通git push,也不要用无保护的git push --force,避免误覆盖其他人提交到该分支的代码;如果是多人共同开发的特性分支,尽量不要做rebase,换用git merge同步代码更稳妥 - 每次提交PR之前,先把当前特性分支rebase到最新的
master,提前解决完冲突再发起评审,减少评审人查看代码的干扰。
内容的提问来源于stack exchange,提问作者Sushivam
相关产品推荐
相关产品推荐

