功能:将某个分支的某次提交应用到当前分支
应用场景:
在合并分支时,是将源分支的所有内容都合并到目标分支上,有的时候我们可能只需要合并源分支的某次或某几次的提交,这个时候我们就需要使用到git的cherry-pick操作了。
在develop分支上开发出功能模块A,B,C,这时提出先上线功能模块A,B。
怎么办?一个办法就是,重新建一个分支,然后再把功能模块C回退,留下功能模块A,B。这种做法不是不行,但是有更好的办法,那就是git所提供的cherry-pick功能。
cherry-pick类似于一个定制化的merge,它可以把其它分支上的commit一个个摘下来,合并到当前分支。
举例
比如我现在有个文件a.c,我在develop分支完成了三个功能模块:feature A,feature B,feature C。如下图:
现在,只要feature A,feature B,我们现在用cherry-pick命令直接把feature A,feature B的提交合并到master分支里,如下操作:
可以看到,功能模块feature A,feature B已经被合并到master分支里。请注意,合并到master分支里的提交哈希值发生了改变,与原来的不同。
可以看出,cherry-pick命令使用方法很简单,即:
git cherry-pick commitID
刚刚是一个个提交cherry-pick到master分支,但如果有100个commit要合并到master分支呢?总不能这样一个个操作吧?git一样帮你想到了,它提供了一个区间操作方法。具体来讲是这样的:
git cherry-pick commit1..commit100
但是要注意,这是一个左开右闭的操作,也就是说,commit1不会被合并到master分支,而commit100则会。这样的话上面的需求可以如下操作来实现:
注意:上面讲到cherry-pick命令每拣选一个commit就会提交一次生成一个新的commit id。 如果我们想让每个commit 拣选后暂缓提交,等到所有commit都拣选完成后,自己手动commit,应该怎么办呢?答案是用-n 选项:
命令:
git checkout master // 先切换分支
git cherry-pick featureA的commitID // 合并featureA功能
git cherry-pick featureB的commitID // 合并featureB功能
注:git cherry-pick 分支名
合并该分支上最新的一次提交记录
参考:
git 一个可以提高开发效率的命令:cherry-pick详解