git cherry-pick——合并单个 commit 到指定分支
作用:git cherry-pick 会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前的分支上。使用场景:当我们需要在当前分支上合并其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到当前分支上,那么就要使用 git cherry-pick 了。例如,现在我们有一个稳定版本的分支 version 1.0,另外还有个开发版本的分支 version 2.0。versi
对于多分支的代码库,常常要将代码从一个分支转移到另一个分支。如果需要另一个分支的所有代码变动,那么就使用合并——
git merge
;如果只需要部分代码变动(某几个提交),这时可以使用cherry pick
。
git cherry-pick
会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前的分支上。
使用场景:
例如,现在我们有一个稳定版本的分支 version 1.0,另外还有个开发版本的分支 version 2.0。version 2.0 开发了多个功能,但现在只需要增加某一个功能到 version 1.0,这里就可以使用
cherry-pick
命令,将这个功能相关的 commit 提取出来,合入到稳定版本的分支上。
用法:
基本命令:
$ git cherry-pick <commit-id>
其中,commit-id
是某次提交的哈希码,使用 git log
能够查到。
当执行完 cherry-pick
之后,将会自动生成一个新的 commit
进行提交,也就是会有一个新的 commit-id
。
举个例子,代码仓库有 master 和 zk 两个分支,如下
a - b - c - d master
\
e - f - g zk
现在,我们将提交 f 应用到 master 分支:
# 切换到 master 分支
$ git checkout master
# Cherry pick 操作
$ git cherry-pick f
操作成功后,代码库变为
a - b - c - d - f master
\
e - f - g zk
分支名也可以作为 git cherry-pick
的参数,表示转移该分支的最新提交,如下
$ git cherry-pick feature
如果顺利的话,正常提交后回达到上面的效果。如果遇到冲突,使用 git diff
解决冲突即可,工作中,不推荐手工解决冲突,最好还是使用一些 diff
工具来处理。
转移多个提交
转移两个提交:
$ git cherry-pick <commit-idA> <commit-idB>
转移一系列提交:
$ git cherry-pick A..B # (1)
$ git cherry-pick A^..B # (2)
注:
- 上面的命令可以转移从 A 到 B 的所有提交。这一系列的哈希码需要按提交时间先后排列, 即最先提交的 commit 放在前面,否则命令将失败,但不会报错。
- 使用命令 (1) ,提交 A 不会包含在
cherry pick
中,相当于左开右闭区间;使用命令 (2) ,提交 A 将会包含在cherry pick
中。
更多推荐
所有评论(0)