在多分支开发的时候会有需要把一个分支的部分commit应用到其他的分支上,然而git merge
会把一个分支的commits都应用到当前分支,这时候我们可以使用git cherry-pick
来完成这一操作,它的作用是选择已存在的commit应用到当前分支上,并产生新的commit SHA-1 校验和。
下面是这个命令的图解示例。
图解示例
如下有两个分支master
和dev
,从C2
开始两个分支开始有不同的commits。
需要把dev
的C6
合并到master
,只需在master
分支上执行git cherry-pick C6
,就会把dev
分支的C6
应用到master
分支上并产生一个新的commitC6'
。
如果要合并多个commits,比如C7
和C8
两个commits,可以执行git cherry-pick C7 C8
,则git提交记录就会变成下面这样。
需要注意的是,新的commit SHA-1 校验和会和原来的commit SHA-1 校验和不一样。
基本用法
下面我们来动手感受一下。先准备一下git的提交记录,示例如下图:
这个时候master
分支有C1,C2,C3,C4文件,dev
分支有C1,C2,C5,C6,C7,C8,C9文件。
接下来我们把dev
分支的一些commits应用到master
分支:
- 根据之前的终端记录或者通过
git log dev
查看C6
的 SHA-1 校验和是fca3793
,在master
分支上执行git cherry-pick fca3793
,可以看到新增了一个 SHA-1 校验和为50982a2
的commit并且在master
分支上多了一个C6文件。 - 执行
git cherry-pick d67e9f6 7bf5e7d
之后,master
分支又多了C7,C8两个文件。
其他用法
- 如果想应用连续的多个commits还可以使用
git cherry-pick commit1..commitn
,应用 SHA-1 校验和从commit1
到commitn
的commits,注意这里并不包含commit1
,如果需要包含可以执行git cherry-pick commit1^..commitn
。 - 如果只想把某一个分支最后一个commit应用到当前分支,可以直接使用
git cherry-pick branch-name
,这个命令的效果是,将branch-name
分支最后一个commit应用到当前分支。 - 当然实际使用过程中,使用
cherry-pick
可能会出现冲突,例如提示如下:
解决冲突再执行git add <paths>
将文件标记为以解决冲突,或者执行git rm <paths>
直接从暂存区和工作区删除文件,最后执行git cherry-pick --continue
,则完成这次cherry-pick
。
如果想要取消这次的cherry-pick
操作可以执行git cherry-pick --abort
。
- -
版权声明:如需转载,请带上本文链接、注明来源和本声明。否则将追究法律责任。https://www.immuthex.com/posts/git-cherry-pick-tutorial
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。