我的团队使用特性分支,这些分支在某个时间点从主分支中创建出来。
# make sure the local version of master is up to date
git checkout master
git fetch origin
git reset --hard origin/master
# create a new branch
git checkout -b feature/name
这些特性分支可以存在几个月,而我们开发新功能的同时,Master分支在这段时间内也会发生变化,因为我们会修复错误或合并其他特性分支。我们大多遵循特性分支工作流程中描述的过程。Github也有关于受保护分支的良好文档。
现在问题是,团队决定保护特性分支(包括管理员),这让我们在同步
master
和feature/name
时只剩下以下几种选择:
- 暂时删除分支保护规则,以便我们可以使用
master
更新feature/name
。优点:更容易的方式(通常只需使用Github UI同步分支)。适用于解决小冲突 -
git checkout feature/name
;git merge master
;解决冲突,提交,然后git push
。缺点:存在某人向未受保护的分支推送的风险(即使是暂时的);合并冲突错误和未经同行审核的代码。
- 创建一个包括来自master的更改的特性分支PR。
优点:所有代码都经过审核。
缺点:耗时;PR通常非常大。
- 根据要解决的冲突混合使用前两种方法。
优点:对于小冲突(如changelog中的冲突),使用第一种方法;对于更大的冲突,使用第二种方法。
缺点:对于什么是小或大冲突存在灰色地带。与选项1相同的缺点。