背景
由于历史原因,我们git repository有 global 维护的Develop主分支,还有一个基于Develop为了运行case进行改动的local维护的APAC 主分支,Develop上不能执行case,APAC分支可以执行case,所有code changes都要push到Develop上,为了日常执行case再把Develop上的change merge到APAC分支上。
当有新feature开发的时候,我们要基于APAC主分支再创建一个APAC_Feature分支,完成cases的设计及实现,运行成功后要提交到Develop主分支,如果在当前APAC_Feature提PR的话,对比Develop主分支会有很多冲突文件,还得反复把冲突文件revert后,确保只提交当前的改动,很是烦人。另外在Develop主分支上创建Develop_Feature分支,如果直接git merge APAC_Feature 把APAC_Feature上的change合并到当前Develop_Feature分支上,其实不止最近的change,之前的change也合并了,又造成一些意外的改动,也是相当烦人的。
以上就是我目前工作中遇到的困境,我就只想merge某个commit而已,不想牵涉到其它版本不一致的文件,我想git一定有这种功能,所以查阅了一下资料,总算可以一劳永逸了,减去了没必要的人力工作。
git merge 和 git cherry-pick区别
git merge
当前在master分支上,git merge topic,会把topic上所有的提交A,B,C都合并到master分支生成一个新的提交
git cherry-pick
合并某一个或多个commit changes
git cherry-pick commitHash
a - b - c - d Master
\
e - f - g Feature
上面的a-g表示commit hash id,当前在Master分支上,执行git cherry-pick f, 会把Feature分支的commit f合并到Master分支上,生成一个新的提交。
a - b - c - d - h Master
\ /
e - f - g Feature
git cherry-pick branch-name
git cherry-pick Feature,合并Feature分支的最近一次commit,就也就是commit g
a - b - c - d - h Master
\ /
e - f - g Feature
合并多个commits:
command | comment |
---|---|
git cherry-pick HashA HashB | 合并commit A和commit B |
git cherry-pick HashA。。HashB | 合并commitA到commit B |
git cherry-pick HashA^。。HashB | 合并commitA到commit B,不包含commitA |
实践
当前分支情况:
a - b - c - d Develop
\
e - f APAC
新Feature开发时需要写新cases, 先sync最新code,创建新分支, 写cases。
git checkout Develop
git pull
git checkout APAC
git merge Develop
git branch APAC_Feature
git checkout APAC_Feature
git add .
git commit -m "Added new cases for new feature"
git log
查看并记录commit id–HashH

a - b - c - d Develop
\ \
e - f - g APAC
\
h APAC_Feature
Develop上创建Develop_Feature分支,合并APAC_Feature上的commit H,Push到remote上就可以提PR了。
git checkout Develop
git branh Develop_Feature
git cherry-pick HashH
git push --set-upstream origin Develop_Feature
i Develop_Feature
/
a - b - c - d Develop
\
e - f - g APAC
\
h APAC_Feature
PR complete后,新的change就merge到了Develop上了:
i Develop_Feature
/ \
a - b - c - d - j Develop
\
e - f - g APAC
\
h APAC_Feature