git cherry-pick 教程

在多分支开发的时候会有需要把一个分支的部分commit应用到其他的分支上,然而git merge会把一个分支的commits都应用到当前分支,这时候我们可以使用git cherry-pick来完成这一操作,它的作用是选择已存在的commit应用到当前分支上,并产生新的commit SHA-1 校验和。

下面是这个命令的图解示例。

图解示例

如下有两个分支masterdev,从C2开始两个分支开始有不同的commits。
git cherry-pick 教程_第1张图片

需要把devC6合并到master,只需在master分支上执行git cherry-pick C6,就会把dev分支的C6应用到master分支上并产生一个新的commitC6'
git cherry-pick 教程_第2张图片

如果要合并多个commits,比如C7C8两个commits,可以执行git cherry-pick C7 C8,则git提交记录就会变成下面这样。
git cherry-pick 教程_第3张图片

需要注意的是,新的commit SHA-1 校验和会和原来的commit SHA-1 校验和不一样。

基本用法

下面我们来动手感受一下。先准备一下git的提交记录,示例如下图:
git cherry-pick 教程_第4张图片

这个时候master分支有C1,C2,C3,C4文件,dev分支有C1,C2,C5,C6,C7,C8,C9文件。
git cherry-pick 教程_第5张图片

接下来我们把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两个文件。

git cherry-pick 教程_第6张图片

其他用法

  • 如果想应用连续的多个commits还可以使用git cherry-pick commit1..commitn,应用 SHA-1 校验和从commit1commitn的commits,注意这里并不包含commit1,如果需要包含可以执行git cherry-pick commit1^..commitn
  • 如果只想把某一个分支最后一个commit应用到当前分支,可以直接使用git cherry-pick branch-name,这个命令的效果是,将branch-name分支最后一个commit应用到当前分支。
  • 当然实际使用过程中,使用cherry-pick可能会出现冲突,例如提示如下:

git cherry-pick 教程_第7张图片
解决冲突再执行git add 将文件标记为以解决冲突,或者执行git rm 直接从暂存区和工作区删除文件,最后执行git cherry-pick --continue,则完成这次cherry-pick
如果想要取消这次的cherry-pick操作可以执行git cherry-pick --abort

    • -
版权声明:如需转载,请带上本文链接、注明来源和本声明。否则将追究法律责任。 https://www.immuthex.com/posts/git-cherry-pick-tutorial

你可能感兴趣的:(git)