各位码农肯定都遇到过这样的情况:在develop分支上努力写代码后,开发出了功能模块A、B、C,此时老板走过来说,年轻人,我们先推出功能模块A和B。你心里一定有一万匹泥马在奔腾,但是为了生活,你必须按照老板的意愿做事。该怎么办?一种方法是重建一个分支,然后回滚功能模块C,留下功能模块A和B。这种方法不是不可以,但是有更好的方法,那就是git提供的cherry-pick功能。Cherry-pick类似于自定义合并,可以将其他分支上的提交一个一个地挑出来合并到当前分支中。话不多说,我们直接上例子。比如我现在有一个文件a.c,我在develop分支完成了三个功能模块:featureA,featureB,featureC。如下图所示:现在坑爹的boss只需要featureA和featureB、现在我们使用cherry-pick命令直接将featureA和featureB的提交合并到master分支中。操作如下:可以看到功能模块featureA和featureB已经合并到master分支中了。请注意,合并到master分支中的提交的哈希值与原来的有所不同。可以看出cherry-pick命令的使用方法很简单,就是:gitcherry-pickcommitID只是将cherry-pick一个一个提交到master分支,但是如果有100个commit要合并到master怎么办分支?不能一一完成。?git也帮你想到了,它提供了一个区间操作的方法。具体是这样的:gitcherry-pickcommit1..commit100但是需要注意的是,这是一个左开右闭的操作,也就是说commit1不会合并到master分支,commit100会。在这种情况下,上述需求可以实现如下:注:上面提到cherry-pick命令每pick一个commit都会提交一个commit,生成一个新的commitid。如果想在每次选中commit后暂停提交,选中所有commit后手动提交怎么办?答案是使用-n选项:怎么样,是不是很简单?学会了cherry-pick命令妈妈再也不用担心老板时不时的脑袋发烫了。本文经授权转载自公众号“良墟Linux”。世界500强外企Linux开发工程师梁旭,在公众号分享大量Linux干货,欢迎关注!
