在上线的时候我们经常会遇到一个问题,就是我们会多个同事同时开发多个功能但是,我们上线的时候会只发布其中的一个或者几个功能。这是我们就需要用cherry-pick来merge部分功能的commit到线上的分支。
先简单说下我们的git flow。
所有的开发我们现在都在develop上,有新的功能我们会基于develop创建一个新的feature分支,开发完后在merge到develop分支,发布sit和uat的时候我们都会直接merge下级分支所有的增量commit到目标环境对应的分支。流程我画了一个简图如下:
develop branch for dev env.
release/develop for sit&uat env.
master for prod env.
hotfix branch from release/develop should merge to release/develop branch as well as develop branch after fix.
hotfix branch from master should merge to develop&release/develop&master branch.
ok,那么现在我们要准备releas了,所有的提交都在UAT的。然后又之上其中的一部分功能怎么办呢?可以使用cherry-pick。
git cherry-pick commitID
当然我们有多个提交的话可以:
git cherry-pick A..B
这样是A 到B 连续的所有提交但是不包括A
git cherry-pick A^..B
比我的实际需求是要merge很多commit,但是又是不连续的,这就有点麻烦,只能git cherry-pick commitID这样一个一个的处理。
冲突解决:
解决冲突后我们用
git add .
然后再
git cherry-pick --continue
不用在commit了,–continue 就相当于commit了。处理完所有的commit,再push就行了。