1.概述
git cherry-pick可以理解为"挑拣"提交,它会获取某一个分支的单笔/多笔提交,并作为一个新的提交引入到你当前分支上。 当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就要使用git cherry-pick了。
2.场景图

如上,在master分支上开发项目。完成了一个稳定版本,我们需要发布,于是新建了一个Stable/1.x分支(这个时候该分支代码和主分支代码是一样的),并且把给这次版本打了一个标记Release tag 1.0(不熟悉tag的参见我这篇文章)。然后分布Stable/1.x分支的代码。
之后切换到master继续开始下一版本的开发。我们有添加了两次功能,并且对Add feature 1和Add feature 2这两个功能都做了提交。之后,我们发现项目有一个地方有bug,于是我们修复bug并且又做了一次提交(fix bug)。但这个bug是Stable/1.x分支也存在的,我们想要在Stable/1.x分支合并master分支的代码,当通过merge合并代码,会把master分支所有的提交都会进行合并,包括Add feature 1和Add feature 2,这不是我们希望的结果。
于是,我们用到了git cherry-pick 版本hash值。它可以只将某一次提交合入到本地当前分支上。
3.示例
现在有一个项目,里面有一个文件hello.txt内容如下:

这个时候我们想要发布项目。于是我们新建了一个分支Stable1(记得git init初始化):

然后回到master分支继续进行下一阶段的开发:

新建一个文件feature.txt进行下一功能(功能a)的开发,并且提交:


新建一个文件featureb.txt进行下一功能(功能b)的开发,并且提交:


然后突然发现有个新bug需要修复,于是在hello.txt中修复bug,并且提交:


这个bug是stable1分支也存在的,我们想要在stable1分支合并master分支中关于fix bug的代码,不希望合并master分支中关于add feature/a和add feature/b的代码。这时候需要用cherry-pick。
在master分支打印版本记录,然后我们切换到stable1分支:

进行cherry-pick

此时在stable1分支,可以看到项目中没有feature.txt、featureb.txt文件,说明并没有合并add feature/a和add feature/b。

打开hello.txt:

上图说明stable1分支合并了master分支中的fix bug提交。

1692

被折叠的 条评论
为什么被折叠?



