命令使用场景

很多情况下,我们需要将分支的代码进行转移到其他分支。一般我们会使用merge命令,进行分支合并,但是这样会产生很多无用的提交记录,使分支显得错综复杂。git cherry-pick命令就可以避免这个问题。

命令简介

git cherry-pick <commitHash>
这个命令就会将特定Hash的提交应用到当前分支。
该命令不仅可以使用commitHash,也可以使用分支名。
git cherry-pick branch-name
其实也很容易理解,因为分支本质上就是一个指针,指向一次具体的commit,即分支本质存储的是一个commitHash。
在sourcetree上,cherry-pick称为遴选。

命令进阶

可以一次性遴选多个提交

git cherry-pick <hashA> <hashB>

可以一次性转移连续提交

git cherry-pick hashA..hashB

要点

  1. hashA和hashB之间要存在线性连续关系,并且HashA要在HashB之前。

如果hashA在hashB之后,cherry-pick会报错。
image.png

  1. 这种写法包后不包前,也就是hashA不会被包含。如果要包含hashA,需要加一个^.

git cherry-pick hashA^..hashB

题外话

关于第一点,我想说的就是
image.png
当绿色分支和红色分支合并的时候,绿色分支上的提交也会在红色分支的提交历史上。所以绿色提交跟红色提交仍是线性关系。

命令的额外参数

—continue

如果命令导致冲突,当手动解决冲突过后,第一步将修改的文件重新加入暂存区,第二步使用下面命令继续cherry-pick的进行。
git cherry-pick --continue

—abort

cherry-pick冲突后,终止cherry-pick的执行。这时会回到cherry-pick前的状态。
git cherry-pick --abort

—quit

cherry-pick冲突之后退出cherry-pick但是回不到操作前的样子。
git cherry-pick --quit

参考文章