git cherry-pick适用场景详解

前提条件:有2个分支,分别是release,hotfix,其中release是用于生产环境的发布分支。

场景1:生产环境hotfix。

T1时刻,使用release分支发布生产。当时的HEAD的commit记为C1.

T2时刻,开发完成下一个迭代周期的代码,并且merge到release准备提测,此时release的HEAD记为C2,注意:C1和C2已经不同了。

T3时刻,生产环境发现了bug,开发基于C1创建一个hotfix分支,代码紧急修复并签入hotfix,用C3表示这个commit,发布生产。

问题:由于hotfix不能基于C2创建(T2时release已污染,存在下一周期待提测代码),如何确保C3被正确merge到release呢?

答案:使用git cherry-pick命令。

git checkout dev // 每个开发人员有自己的dev分支,这个分支基于release创建,时刻和release同步

git cherry-pick -n C3   //C3是hotfix的提交sha-1

git commit -am "把hotfix(C3)的代码cherry-pick到release"

git push origin dev

最后,去gitlab里发起一个MergeRequest吧,dev->release

场景2:上一次发布生产环境时,有