git cherry-pick 提取提交进行合并
前言
最近在发版的时候遇到一个头疼的问题,就是develop
开发分支上的一个功能暂时还不能上线,但是其他的功能提交需要上线,此时平时常用的merge合并就不太行了。
为此老大提了一个新的合并方式:git cherry-pick
,这个我之前都没有使用过,它的作用就是可以提取其他分支的指定commit进行合并,这样就可以跳过不能上线的功能提交了。
教程
没有图,在b站视频上偷了一张图来用。
可以看到我们有两列分支,左边的12357就是主分支,右边的468就是开发的新功能,但是6这个提交不能进行合并,我们需要提取4和8合并到主分支。
在cherry-pick之前我们需要将分支切换到main分支,因为最终代码需要合并到这个分支里,所以先切换到这个分支。
git checkout main
我们有两种方式来进行操作。
vscode插件可视化操作
首先我们需要安装插件:GitLens
安装完毕后我们进入到git页面,打开里面的BRANCHES折叠菜单,可以看到有仓库对应的分支信息。
我们展开develop
分支,找到需要合并的提交记录,右键 --> Cherry Pick Commit,此时会弹出三个选项,从上倒下分别是:
- Cherry Pick
- Cherry Pick & Edit
- Cherry Pick without Committing
第一个Cherry Pick
就是直接将这个提交合并到main分支中。
第二个Cherry Pick & Edit
表示我要合并,但是我要修改commit信息。
第三个Cherry Pick without Committing
表示我要将此次提交合并到main分支的暂存区,我们还可以二次修改,确认没问题手动提交到main分支。
大家可以根据自身情况动态选择。
使用这种可视化的方式,一次只能提取单个,没办法多个,如果需要多个,就一个个操作。
命令方式
命令的方式非常灵活,你可以选择单个,也可以选择多个,甚至选择区间范围。
不管是命令还是可视化,你都要先切换到合并的分支,而不是被合并的分支,这个开头也说了。
Cherry Pick 单个
git cherry-pick <commit-hash>
<commit-hash>
就是提交的这次hash名,这个就不多说了。
Cherry Pick 多个
git cherry-pick <commit-hash> <commit2-hash> <commit2-hash>
用空格分隔hash名
Cherry Pick 指定区间内的
比如我们上面的分支图,右侧有三个提交分别是:4、6、8;如果我只需要4和8中间的部分,这里中间的部分就是6了。假如提交是:4、5、6、8;那么中间的就是5和6会被合并。
git cherry-pick <commitA-hash>..<commitB-hash>
commitA-hash
就是4的hash,<commitB-hash>
就是8的hash,中间用..
关联。
Cherry Pick 指定范围
除了区间,我们还可以指定一个范围,还是三个提交:4、6、8;我只需要指定头和尾,合并时会将头和尾以及中间部分全部合并。
git cherry-pick <commitA-hash>^..<commitB-hash>
Cherry Pick 多个出现冲突
当你合并多个提交时,大概率会出现冲突的情况,你可以将冲突解决并提交到暂存区后,运行这个命令继续执行下一个cherry pick。
git cherry-pick --continue
每次解决完冲突都要运行一次这个,可以理解为这个就是下一步。
回车运行后会进入到本次pick的commit界面,如果没啥改动直接ctrl+o
保存或者ctrl+x
退出编辑器,然后按esc
,接着用英文输入::wq
回车即可,这是保存并退出,如果不想保存就用:q!
强制退出。
此时就会进入下一个cherry-pick,存在冲突就解决冲突提交到暂存,如此重复处理。
取消
取消还未提交的 cherry-pick
git cherry-pick --abort
取消已提交的
那就直接 revert 或者 reset 回退处理就行了。
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
全部评论 2
烟雨
Google Chrome Windows 10木灵鱼儿
FireFox Windows 10